通过简化的XSD进行以下操作:
<?xml version="1.0" encoding="UTF-8"?> <xs:schema targetNamespace="com.acme" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="Widget"> <xs:complexType> <xs:sequence> <xs:element minOccurs="0" name="color" nillable="true" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="WidgetColor" type="xs:string" /> </xs:schema>
然后,尝试以下操作:
xjc test.xsd
您应该总是得到以下异常:
parsing a schema... compiling a schema... [ERROR] Two declarations cause a collision in the ObjectFactory class. line 11 of file:/C:/test.xsd [ERROR] (Related to above error) This is the other declaration. line 7 of file:/C:/test.xsd Failed to produce code.
请注意,元素名称“Widget”是complexType,并且具有名为“color”的元素.在元素“Widget”的同一级别,还有一个名为“WidgetColor”的简单元素.
更令人费解的是,如果删除属性minOccurs =“0”或者从“color”元素序列中删除属性nillable =“true”,则xjc会成功编译模式.
有没有人见过这个问题或者可以建议一个解决方案?
谢谢,
麦克风.
解决方法
好吧,我终于想出了如何解决我的问题.它在于使用自定义绑定为其中一个声明指定不同的类名.
custom-binding.xjb的内容
<?xml version="1.0" encoding="UTF-8"?> <bindings version="2.0" xmlns="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <bindings schemaLocation="test.xsd"> <bindings node="//xs:element[@name='WidgetColor']"> <class name="BaseWidgetColor" /> </bindings> </bindings> </bindings>
操作:
C:\>xjc -b custom-binding.xjb test.xsd parsing a schema... compiling a schema... acme\com\BaseWidgetColor.java acme\com\ObjectFactory.java acme\com\Widget.java acme\com\package-info.java
Patience et longueur de temps valent mieux que rage et acharnement ……!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。