【问题标题】:xjc and XSD choicexjc 和 XSD 的选择
【发布时间】:2013-09-08 07:01:09
【问题描述】:

当我运行 xjc 来生成代表这个 XSD sn-p 的 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,我得到的类与它本来的类没有区别。

我想要一种有点智能的类型,它可以让我一次最多选择一个元素。例如,如果我调用生成的setFile 方法,它应该使路径为空。是否有一些插件可以用于代码生成器的明显需求?

【问题讨论】:

    标签: java jaxb xsd xjc choice


    【解决方案1】:

    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;
    

    更多信息

    【讨论】:

    • 好的,功能上看起来很棒,非常感谢。我想您通过检查pathOrFile 的类型(例如if (pathOrFile instanceof String))来区分路径与文件。正确的?当一些选择元素的类型是相同类型的类型? span>时,这是如何工作
    • @blueimpb - 当元素属于同一类型时,结果将被包裹在 JAXBElement 中以保留元素信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 2021-11-14
    • 2011-11-18
    相关资源
    最近更新 更多