xjc和XSD的选择

时间:2013-09-04 16:43:12

标签: java jaxb xsd xjc choice

当我运行xjc以生成表示此XSD片段的Java类型时:

  <xs:complexType name="fileUploadRequest">
    <xs:choice>
      <xs:element name="path" type="xs:string"/>
      <xs:element name="file" type="xs:base64Binary"/>
    </xs:choice>
  </xs:complexType>

如果我指定了一个带有可选元素的sequence,我会得到一个与它本来无法区分的类。

我想要一种具有一点智力的类型,这样我一次最多可以选择1个元素。例如,如果我调用生成的setFile方法,则应将路径设为null。是否有一些插件我可以用于代码生成器的明显要求?

1 个答案:

答案 0 :(得分:5)

<强> binding.xml

您可以使用以下外部绑定文件生成您要查找的属性类型:

<?xml version="1.0" encoding="UTF-8"?>
<bindings xmlns="http://java.sun.com/xml/ns/jaxb"
          version="2.1">
    <globalBindings choiceContentProperty="true"/>
</bindings> 

XJC致电

使用-b标志引用绑定文件。

xjc -b binding.xml schema.xsd

生成的属性

现在将生成以下属性:

@XmlElements({
    @XmlElement(name = "path", type = String.class),
    @XmlElement(name = "file", type = byte[].class)
})
protected Object pathOrFile;

了解更多信息