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