Как обрабатывать элементы и атрибуты с одинаковыми именами в xsd при создании pojos с использованием jaxb? - PullRequest
5 голосов
/ 07 марта 2012

У меня есть xsd, который содержит что-то вроде:

<xs:complexType>
  <xs:sequence minOccurs="0">
    <xs:element ref="HereIsTheProblem"/>
    <xs:element ref="blaBla"/>
  </xs:sequence>
  <xs:attribute name="something" type="xs:string" use="required">
    <xs:annotation/>
  </xs:attribute>
  <xs:attribute name="somethingElse" type="xs:string">
    <xs:annotation/>
  </xs:attribute>
  <xs:attribute name="HereIsTheProblem" type="xs:string">
    <xs:annotation/>
  </xs:attribute>
</xs:complexType>

Теперь, когда я пытаюсь проанализировать схему с помощью jaxb для генерации классов Java, она не может:

[ERROR] Element "{http://something.somemorething.com/etc/}HereIsTheProblem" shows up in more than one properties.

как решитьэто без внесения каких-либо изменений в схему?

PS: моя версия jaxb - 2.1.13

1 Ответ

7 голосов
/ 07 марта 2012

Вам нужно использовать файл привязки, указывающий jaxB, как он должен обрабатывать это столкновение имен. Например, поместите что-то вроде этого в файл с именем что-то вроде bindings.xjb:

<jaxb:bindings version="2.1" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:com.fnf="http://www.fnf.com/xes">
  <jaxb:bindings schemaLocation="your schema location here" node="/xs:schema">
    <jaxb:bindings node="//XPath selector">
      <jaxb:property name="HereIsTheProblem2" />
    </jaxb:bindings>
  </jaxb:bindings>
</jaxb:bindings>

Не могу предоставить вам полное решение без полной схемы

...