有一个奇怪的问题。我正在将Java / jaxb与XSD架构一起用于有效负载。
我的课程的简要概述:
public abstract BaseClass{
public InnerClass{}
@XmlElement (required = false)
protected ArrayList<InnerClass> list;
}
public DerivedClass1 extends BaseClass{
public DerivedInner1 extends InnerClass{}
}
public DerivedClass2 extends BaseClass{
public DerivedInner2 extends InnerClass{}
}
我的代码运行得很好,即使生成的XML也很好并且可以工作。我的问题是,在生成的XML中,list
的每个元素后跟<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="DerivedInner1"
。我被要求更改或删除它。在我的模式中,我确实有一个已定义的名称空间,但是由于某种原因,我的list
没有使用它。
模式的快速摘要:
<xs:complexType name="InnerClass1">
..
..
</xs:complexType>
<xs:complexType name="BaseClass">
<xs:sequence>
...
...
<xs:element name="list" type="InnerClass1" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
因此,我的有效负载具有定义和打印的名称空间,但是list
的每个元素都没有,并为每个元素打印该默认行。删除甚至使用与其余有效负载相同的名称空间都是很好的。
我曾尝试将@XmlElements({InnerClass1.class,InnerClass2.class})放进去,但是由于某些原因,当jaxb解组时,它只会解组到那些元素之一。例如,第一次运行可以完美地与InnerClass1配合使用,但是随后运行InnerClass2则可以解组回InnerClass1。
我也尝试了@XmlElementRef无济于事。任何帮助表示赞赏。谢谢。