2011-12-26 23 views
3

私はmaven-jaxb2-pluginを使用してxsdからjaxbアノテーション付きクラスを生成します。類似の属性名を持つXSDからJAXBクラスを生成する

[ERROR] Error while parsing schema(s).Location [ file:schema1.xsd{10,16}]. org.xml.sax.SAXParseException: 'A3' is already defined

は、この問題を解決する方法はあります:私はそれは私にエラーを与えるプラグインMavenを実行すると

<?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> 

:私はそれらのような多くのXSDファイルがありますか? 実際には、サーバーへの/からの要求/応答メッセージを表す多くのXSDがあります。私はメッセージの作成、検証、解析を簡単にしたい。多分これには別の解決策がありますか?

+0

あなたのJAXBバインディングファイル内の第二またはあなたのXSDの最初のA3の名前を変更することができますか?私は 'maven-jaxb2-plugin'のドキュメントを見つけることができません。私は心からの選択肢のすべてを知りません。実現可能であれば、 'targetNamespace =" http:// whatever "属性をスキーマに追加して、同じ名前の型を区別してみてください。すべてのスキーマファイルを別のJavaパッケージにコンパイルすることは可能です。それも動作する可能性があります。これを動作させるには、プラグインのmultipe [executions](http://maven.apache.org/guides/mini/guide-configuring-plugins.html#Using_the_executions_Tag)を指定する必要があります。 –

答えて

4

私も同様の問題がありました。私はマッピングクラスを生成するためにJAXBを介して(maven-jaxb2-plugin経由で)実行していた独立した独立した2つのWSDL(それぞれにそれぞれいくつかのスキーマ定義があります)を持っていました。

WSDLが重複したスキーマ定義を共有していたため、XJCがチョークしていました。

これらはどちらも独立しているため、各WSDL(ここではHow can I tell jaxb/Maven to generate multiple schema packages?)で1つずつ、maven-jaxb2-pluginの2つの別々の実行を実行してJAXBマッピングを生成できました。

1

同じ名前空間内で競合する要素の定義を持つことはできません。これは、Javaの特定のパッケージで同じ名前の複数のクラスを許可しない場合と同じです。あなたの最善の策は、異なる名前または異なる名前空間でそれらを定義することです。

0

あなたがあなたの `pom.xml`から、あなたのプラグインの設定を投稿することができます

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