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