Сбой xjc в импортированной схеме при использовании эпизодов из-за настройки свойств - PullRequest
0 голосов
/ 20 июня 2019

У меня есть две схемы a.xsd и b.xsd.b импорт a.На одном элементе a настраивает компиляцию JAXB.

a.xsd:

<xsd:schema
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    targetNamespace="a"
    xmlns:a="a"
    jaxb:version="2.0"
    elementFormDefault="qualified">

    <xsd:element name="a" type="a:A1Type"/>

    <xsd:complexType name="A1Type">
        <xsd:sequence>
            <xsd:element name="a" type="xsd:string">
                <xsd:annotation>
                    <xsd:appinfo>
                        <jaxb:property name="a0"></jaxb:property>
                    </xsd:appinfo>
                </xsd:annotation>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>

</xsd:schema>

b.xsd:

<xsd:schema
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    targetNamespace="b"
    xmlns:a="a"
    xmlns:b="b"
    elementFormDefault="qualified">

    <xsd:import namespace="a" schemaLocation="a.xsd"/>

</xsd:schema>

xjc -extensions a.xsd работает, какxjc -extensions a.xsd b.xsdОднако, если я сделаю xjc -extensions -episode a.ep a.xsd, а затем xjc -extensions b.xsd -b a.ep, компиляция завершится неудачно со следующей ошибкой

[ERROR] compiler was unable to honor this property customization. It is attached to a wrong place, or its inconsistent with other bindings.
  line 16 of file:/D:/episode/d/src/main/resources/a.xsd

[ERROR] (the above customization is attached to the following location in the schema)
  line 13 of file:/D:/episode/d/src/main/resources/a.xsd

Если я удаляю <xsd:annotation> из a.xsd, все работает.

Почему я получаю эту ошибку и как я могу заставить ее работать с эпизодами настройки и ?

Редактировать: Некоторые выводы из моих собственных исследований:

Я нашел этот вопрос, который звучал очень похоже.Ответ предлагает использовать внешний файл привязки вместо встроенных настроек.Я попробовал это и создал файл привязки bindings.xjb, включая следующее.

   <jaxb:bindings schemaLocation="a.xsd" node="/xs:schema">
      <jaxb:bindings node="xs:complexType[@name='A1Type']/xs:sequence/xs:element">
         <jaxb:property name="a0"></jaxb:property>
      </jaxb:bindings>
   </jaxb:bindings>

При этом двухэтапная компиляция работает и имеет правильную настройку.Если я включу bindings.xjb на втором шаге, то есть xjc -extension b.xsd -b a.ep -b bindings.xjb, я снова получу ошибку.

Поскольку мне было любопытно, я включил настройку в файл эпизода a a.epи попытался запустить xjc -extension b.xsd -b a.ep еще раз.Это снова дало ошибку.

Это наводит меня на мысль, что JAXB / xjc считает настройку несовместимой с привязкой <class> эпизода, даже если указанный класс соглашается с настройкой.

Тогда может показаться, что встроенная настройка и компиляция модульной схемы с эпизодами несовместимы друг с другом.Это нецелесообразно, поэтому я бы с радостью здесь оказался неправ.

...