помогите пожалуйста: xjc выдает "Два объявления вызывают коллизию в классе ObjectFactory" - PullRequest
7 голосов
/ 20 сентября 2011

Возьмите следующие упрощенные 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" ИЛИ вы удалить атрибут nillable = "true" из последовательности элементов "color", xjcуспешно компилирует схему.

Кто-нибудь когда-либо видел эту проблему или может предложить решение?

Спасибо,

Майк.

1 Ответ

7 голосов
/ 21 сентября 2011

Ну, я наконец-то понял, как решить мою проблему. Он заключается в использовании настраиваемой привязки для указания отдельного имени класса для одного из объявлений.

Содержимое 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

Терпение и долгота времен валентинки и ярость ...!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...