Генерация класса JAXB из XSD с похожими именами атрибутов - PullRequest
4 голосов
/ 26 декабря 2011

Я использую maven-jaxb2-plugin для генерации jaxb аннотированных классов из xsd. У меня много таких xsd файлов:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="A3">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="loginPartner">
          <xs:complexType>
            <xs:sequence>
              <xs:element type="xs:string" name="login"/>
              <xs:element type="xs:string" name="password"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="A3">
    <xs:complexType>
      <xs:sequence>
        <xs:element type="xs:string" name="errorCode"/>
        <xs:element type="xs:string" name="errorDescription"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Когда я запускаю плагин maven, он выдает ошибку:

[ОШИБКА] Ошибка при синтаксическом анализе схем. Расположение Файл: schema1.xsd {10,16}]. org.xml.sax.SAXParseException: «A3» уже определен

Есть ли способ исправить это? На самом деле у меня есть много XSD, представляющих сообщения запроса / ответа на сервер или с сервера. Я хочу упростить создание, проверку, анализ сообщений. Может быть, есть другое решение для этого?

Ответы [ 3 ]

6 голосов
/ 31 мая 2012

У меня была похожая проблема; У меня было два отдельных и независимых WSDL (каждое с несколькими определениями схем в каждом), которые я запускал через JAXB (через плагин maven-jaxb2-plugin) для генерации классов отображения.

В моем WSDL есть повторяющееся определение схемы, из-за которого XJC задыхался.

Поскольку они оба были независимыми, я смог сгенерировать сопоставления JAXB, запустив два отдельных выполнения плагина maven-jaxb2-plugin - по одному для каждого WSDL (здесь описано - Как я могу сказать jaxb / Maven генерировать несколько пакеты схемы? ).

1 голос
/ 28 декабря 2011

Вы не можете иметь конфликтующие определения элементов в одном и том же пространстве имен.Это то же самое, что не позволять нескольким классам с одним и тем же именем в данном пакете в Java.Лучше всего определить их под разными именами или в разных пространствах имен.

0 голосов
/ 28 сентября 2017

вы можете переименовать второй или первый A3 вашего xsd в файле привязки jaxb

<jaxb:bindings schemaLocation="filePath.xsd" node="/xs:schema">
        <jaxb:bindings node="//xs:element[@name='A3']">
            <jaxb:Property name="SecondA3"/>
        </jaxb:bindings>
</jaxb:bindings>
...