我有一个如下所示的 xml 文件:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Envelope>
<AttrA>aaa</AttrA>
<AttrB>bbb</AttrB>
<Element ID="1">elem1</Element>
<Element ID="2">elem2</Element>
...
<Element ID="n">elemn</Element>
</Envelope>
以及对应的 Java 类:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"attrA",
"attrB",
"elements",
})
@XmlRootElement(name = "Envelope")
public class Envelope implements Serializable, Equals, HashCode, ToString {
@XmlElement(name = "AttrA", required = true)
protected AttrA attrA;
@XmlElement(name = "AttrB", required = true)
protected AttrB attrB;
@XmlElement(name = "Element")
protected List<Element> elements;
@OneToMany(targetEntity = Element.class, cascade = {CascadeType.ALL})
@JoinColumn(name = "ELEMENT_ID")
public List<Element> getElements() {
if (elements == null) {
elements = new ArrayList<Element>();
}
return this.elements;
}
}
解组工作正常,我的元素列表也填充了适当的元素,但有时元素在列表中被交换。Eq 有时我会得到一个元素 1 和 2 交换或元素 2 和 3 交换位置的列表。这会影响稍后在对象处理期间的 equals 方法。我无法弄清楚究竟是什么影响了元素在列表中的插入顺序。
是否有任何注释或其他方式来定义元素的插入顺序?有人看到我的代码有任何其他问题吗?
问候,伊琳娜。
更新: 我的架构:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="unqualified" jxb:version="1.0">
<xs:element name="Envelope">
<xs:complexType>
<xs:sequence>
<xs:element ref="mynamespace:AttrA"/>
<xs:element ref="mynamespace:AttrB"/>
<xs:sequence>
<xs:element ref="mynamespace:Element" minOccurs="0" maxOccurs="99"/>
</xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
...
<xs:element name="Element">
<xs:complexType>
<xs:sequence>
<xs:element name="ElemAttrA" type="ElemAttrA" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="ID" use="required">
<xs:simpleType>
<xs:restriction base="xs:positiveInteger">
<xs:minInclusive value="1"/>
<xs:maxInclusive value="99"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:schema>
我的绑定-xjc.xjb:
<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings xmlns="http://java.sun.com/xml/ns/jaxb"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:hj="http://hyperjaxb3.jvnet.org/ejb/schemas/customizations"
xmlns:orm="http://java.sun.com/xml/ns/persistence/orm"
xmlns:persistence="http://java.sun.com/xml/ns/persistence"
xmlns:annox="http://annox.dev.java.net"
jaxb:extensionBindingPrefixes="hj orm annox persistence">
<jaxb:bindings schemaLocation="envelope.xsd" node="/xs:schema">
<jaxb:bindings node="//xs:element[@name='Envelope']/xs:complexType/xs:sequence/xs:sequence/xs:element[@ref='mynamespace:Element']">
<hj:one-to-many>
<orm:order-by name="ID" />
</hj:one-to-many>
</jaxb:bindings>
...
</jaxb:bindings>
...
</jaxb:bindings>