Сбой xjc в импортированной схеме при использовании эпизодов из-за настройки свойств

У меня есть две схемы 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> привязка, даже если указанный класс согласен с настройкой.

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

0 ответов

Другие вопросы по тегам