为派生类XML JAXB指定/删除命名空间

时间:2019-11-28 00:38:22

标签: java xml inheritance xsd jaxb

有一个奇怪的问题。我正在将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无济于事。任何帮助表示赞赏。谢谢。

0 个答案:

没有答案