我使用Jaxb2Marshaller
和XMLStreamWriter
从XSD
的 Java POJO-s生成XML文件。
并且我意识到,如果我在不同环境中运行应用程序 ,元素中属性的顺序将不同。
我还意识到,在我的机器中,它使用与XSD中相同的顺序,而在其他机器中,它看起来像在使用降序字母数字顺序。
但是我无法证明这个描述。当然是字母数字顺序,但是很有可能。
什么原因导致此订单更改?
我知道属性的顺序在XML中应该无关紧要,但是实际上没有解决方案来设置Java中元素属性的顺序吗?当然还有任何类型的库。
答案 0 :(得分:1)
我将检查HashMaps或HashSets是否参与处理(以及类似的collections / classs ...)。
order of the elements of the iterator of these collections are not defined在JVM versions and imlementations之间可以不同地实现
如果涉及数据库选择,则在不使用显式“ order by”的情况下,元素的顺序可以不同(按供应商,版本,机器,状态)。例如。在postgresql上,在我的PC the last touched elements come first, then the others
上答案 1 :(得分:0)
JAXB使用反射进行编组。通过反射返回的字段列表未按任何特定顺序排序(请参见here)。因此,在编组时,属性的顺序不一定反映XSD或Java POJO中的顺序。很有可能,不同操作系统上的不同Java版本可能会以不同方式实现反射,因此顺序可能会更改。
如果只需要在不同安装之间保持一致,请使用@XMLAccessorOrder
按字母顺序对它们进行排序。
This也可能有帮助。