当使用元素ref时,xjc为可选元素生成不同的代码

时间:2015-10-21 12:07:32

标签: xml xsd xjc

我有以下架构,据我所知,它声明了元素<foo>,它有两个可选元素<bar><baz>类型为nillable string。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="bar" type="xs:string" nillable="true" />

  <xs:element name="foo">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="bar" minOccurs="0"/>
        <xs:element name="baz" type="xs:string" nillable="true" minOccurs="0"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

</xs:schema>

当我通过xjc运行架构时,输出如下。

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "bar",
    "baz"
})
@XmlRootElement(name = "foo")
public class Foo {

    @XmlElement(nillable = true)
    protected String bar;
    @XmlElementRef(name = "baz", type = JAXBElement.class, required = false)
    protected JAXBElement<String> baz;

    // getters and setters as you'd expect
}

请注意bar未生成为JAXBElement<String>的情况,即使它既是可存储的也是可选的。这是xjc中的错误吗?我该如何区分这两个文件?

<foo>
  <baz>hello world</baz>
</foo>

<foo>
  <bar xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
  <baz>hello world</baz>
</foo>

0 个答案:

没有答案