Ошибка: не удалось проанализировать схему по xjc в случае xs: choice - PullRequest
4 голосов
/ 13 марта 2012

Я хочу сгенерировать java-классы из схемы, используя jaxb, но я получаю ошибку синтаксического анализа от xjc.У меня есть 2 элемента, завернутых в выбор, затем один из элементов снова повторяется сразу после выбора:

<xs:element name="A">
  <xs:complexType>
    <xs:choice>
      <xs:sequence maxOccurs="unbounded">
        <xs:element ref="X"/>
        <xs:element ref="Y"/>
      </xs:sequence>
      <xs:element ref="Y"/>
    </xs:choice>
  </xs:complexType>
</xs:element>

jaxb выбрасывает:

[ERROR] Element "{*something*}Y" shows up in more than one properties.
 line *something* of file:/*something*.xsd

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

Ответы [ 3 ]

6 голосов
/ 13 марта 2012

Посмотрите на этот пост на SO .Решение состоит в том, чтобы предоставить пользовательский файл привязки, который отображает ваш Y вне выбора использования другого имени свойства.

Возможно, я бы также отобразил повторяющуюся последовательность в класс с двумя свойствами (X и Y), но это нечто иное.

Я также попробовал схему теста (полученную из вашей,только что добавил фиктивные сложные элементы для X и Y) с версией 7.1 бесплатной среды IDE NetBeans, и все получилось без необходимости в пользовательском файле привязки.Я использовал JAXB-версию 2.2.4

2 голосов
/ 23 сентября 2013

Я также пытался заставить это работать, как описал Петру. Рахул не опубликовал свое решение, так что вот мой файл привязок.

<?xml version="1.0" encoding="UTF-8"?>

<jaxb:bindings 
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
    jaxb:extensionBindingPrefixes="xjc"
    version="2.1">

    <jaxb:bindings schemaLocation="test.xsd" node="//xs:element[@name='A']/xs:complexType/xs:choice[1]">
        <jaxb:property name="OutsideY"/>
    </jaxb:bindings>
</jaxb:bindings>

Выход XJC:

$xjc -version
xjc version "JAXB 2.1.10 in JDK 6"
JavaTM Architecture for XML Binding(JAXB) Reference Implementation, (build JAXB 2.1.10 in JDK 6)

$xjc -p com.example.test -d src -extension -b bindings.xml test.xsd
parsing a schema...
compiling a schema...
com\example\test\A.java
com\example\test\ObjectFactory.java
0 голосов
/ 19 октября 2018

Может быть, кто-то прочтет это: org.jvnet.jaxb2_commons.jaxb2-basics не работает над ссылками!Я действительно пробовал много способов заставить этот плагин работать, а вы просто не можете.(Это также упоминается на странице github)

@ Станислав Мамонтов мне очень помог.

Если кому-то интересно, это также работает для групп:

XSD:

<xsd:group name="OpticalID">
<xsd:sequence>
  <xsd:choice>
    <xsd:sequence>
      <xsd:group ref="MPCID"/>
      <xsd:element ref="trkSub" minOccurs="0"/>
    </xsd:sequence>
    <xsd:sequence>
      <xsd:element ref="trkSub"/>
    </xsd:sequence>
  </xsd:choice>
</xsd:sequence>

BINDING:

<jaxb:bindings node="xsd:group[@name='OpticalID']//xsd:sequence[1]/xsd:choice[1]/xsd:sequence[1]/xsd:element[@ref='trkSub']">
    <jaxb:property name="trkSubOrNull"/>
</jaxb:bindings>
...