xjc 和 XSD 的选择
Posted
技术标签:
【中文标题】xjc 和 XSD 的选择【英文标题】:xjc and XSD choice 【发布时间】: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
方法,它应该使路径为空。是否有一些插件可以用于代码生成器的明显需求?
【问题讨论】:
【参考方案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;
更多信息
http://blog.bdoughan.com/2011/04/xml-schema-to-java-xsd-choice.html【讨论】:
好的,功能上看起来很棒,非常感谢。我想您通过检查pathOrFile
的类型(例如if (pathOrFile instanceof String)
)来区分路径与文件。正确的?当一些选择元素的类型是相同类型的类型? span>时,这是如何工作
@blueimpb - 当元素属于同一类型时,结果将被包裹在 JAXBElement
中以保留元素信息。以上是关于xjc 和 XSD 的选择的主要内容,如果未能解决你的问题,请参考以下文章
Maven Xjc / Jaxb插件无法解析简单的Xsd文件