web-services – 请帮助:xjc抛出“两个声明导致ObjectFactory类中的冲突”

通过简化的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 ……!

相关文章

vue阻止冒泡事件 阻止点击事件的执行 &lt;div @click=&a...
尝试过使用网友说的API接口获取 找到的都是失效了 暂时就使用...
后台我拿的数据是这样的格式: [ {id:1 , parentId: 0, name:...
JAVA下载文件防重复点击,防止多次下载请求,Cookie方式快速简...
Mip是什么意思以及作用有哪些