2012-03-13 7 views
4

jaxbを使用してスキーマからJavaクラスを生成したいのですが、xjcから構文解析エラーが発生します。エラー:xs:choiceの場合にxjcでスキーマを解析できませんでした。

<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:私はちょうど選択後の要素の一つが再び繰り返され、その後の選択肢に包まれた2つの要素を持っている私のJAXBのバージョンは2.1.13

+0

JAXBのバージョンは、 "必要" な要件ですか?あなたは最新に移動できますか?私は、Java 7で利用可能な最新のものをテストしました。カスタムバインディングファイルを必要とせずに動作します。 –

+1

いいえそれは必須ではない、それはちょうど私が現在何かの種類の問題であったので、どのようなスリムなケースでも、2.1.13&を使用しているので、物事をクリアするだけです。 –

+1

申し訳ありませんが、jaxbのバージョンは変更できません。 と私はまだバインディングを動作させることができません!助けて! –

答えて

6
です

これを見てくださいpost on SO。解決策は、Yを別のプロパティ名の代わりにマップするカスタムバインディングファイルを提供することです。

おそらく、2つのプロパティ(XとY)を持つクラスに繰り返しシーケンスをマップすることもできますが、それは別のものです。

また、無料のNetBeans IDEのバージョン7.1でテストスキーマ(あなたから派生し、XとYのダミー複合要素を追加しました)を試しました。カスタムバインディングファイルを必要とせずに済ませました。私が使ったJAXBのバージョンは2.2.4です

+1

2.1.13を使用する必要があり、バージョンを変更することはできません。 私は依然としてバインディングの問題に直面しています。私はクラス内の選択肢の中にシーケンスをパックしようとしましたが、complexTypeだけをクラスの中に入れることができます。それは <::プロパティ名= "OutsideY"/JAXB> <バインディング/ JAXB> \t:< " - - XPathの" バインディングノード= JAXB>また、別の名前で をプロパティ名を結合の使用はありませんバインディングファイルを読み込み中にエラーを出すことはありませんが、何もしません!私はXPathの問題がないと確信しています。 –

+1

助けてくれてありがとう、ついにそれを得ました:) –

+0

@Petru JAXB 2.2.4でこれが動作するかどうか確認してください。上記のスキーマを試したので、 '[ERROR] cos-nonambig:'というエラーが表示されます。私は 'xjc 2.2.4-2'を使用します – ulab

2

私はまた、Petruとしてそれを動作させるようにしました。 Rahulは私のバインディングファイルを自分のソリューションに載せていません。

<?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 
関連する問題