2

xsd ファイルのセットがあり、これらのタイプの Java クラスを生成する必要があります。問題は、複数の xsd ファイルと、これらのファイル内の xml タイプの複数の定義にあります。また、複数の定義がすべて単純明快というわけではありません。定義をオーバーライドするものもあれば、拡張するものもあれば、異なる名前空間で同じものもあれば、すべての意味で同じものもあります。規則的なパターンはありません (実際、これらの XSD は別の会社のものであり、xml のデータが必要です。そのため、JAVA-XML マッピングを気にしないため、XSD について不平を言うことは実際にはオプションではありません :|)。

2 つの異なる JAXB プラグイン (mojo と jvnet) を試しましたが、どちらも同じエラーが発生します -

com.sun.istack.SAXParseException2: 2 つの宣言により、ObjectFactory クラスで衝突が発生します。

私はこれが必ず起こることを理解しており、いくつかのことを試しました. mojo プラグインを使用して、maven にすべてのファイルを個別にコンパイルし、それらを異なるパッケージ (プラグインに複数あり、それぞれ独自の .

そして後で、同じことを別の方法でやろうとしました。jvnet プラグインを使用し、次のように bindings.xml ファイルで xsd と Java パッケージのマッピングを定義しました -

    <bindings schemaLocation="../xsd/1.0/abcd.xsd">
      <schemaBindings>
        <package name="com.xxx.services.yyy.abcd"/>
      </schemaBindings>
    </bindings>

そして、私はこのエラーに遭遇しました -

com.sun.istack.SAXParseException2: Multiple <schemaBindings> are defined for the target namespace "http://www.fpml.org/FpML-5/recordkeeping"
    at com.sun.tools.xjc.ErrorReceiver.error(ErrorReceiver.java:82)
    at com.sun.tools.xjc.reader.xmlschema.ErrorReporter.error(ErrorReporter.java:79)
    at com.sun.tools.xjc.reader.xmlschema.BGMBuilder.checkMultipleSchemaBindings(BGMBuilder.java:343)
    at com.sun.tools.xjc.reader.xmlschema.BGMBuilder.buildContents(BGMBuilder.java:313)
    at com.sun.tools.xjc.reader.xmlschema.BGMBuilder._build(BGMBuilder.java:182)
    at com.sun.tools.xjc.reader.xmlschema.BGMBuilder.build(BGMBuilder.java:116)
    at com.sun.tools.xjc.ModelLoader.annotateXMLSchema(ModelLoader.java:415)
    at com.sun.tools.xjc.ModelLoader.load(ModelLoader.java:167)
    at com.sun.tools.xjc.ModelLoader.load(ModelLoader.java:113)
    at org.jvnet.jaxb2.maven2.RawXJC2Mojo.loadModel(RawXJC2Mojo.java:636)
    at org.jvnet.jaxb2.maven2.RawXJC2Mojo.doExecute(RawXJC2Mojo.java:259)
    at org.jvnet.jaxb2.maven2.RawXJC2Mojo.execute(RawXJC2Mojo.java:135)

これは、別の方法で表示された同じエラーです。

他のオプションに飛び込む前に、このタイプのバインディングに使用すべき最善の戦略を見つけることにしました。どうやら私が知っているものは機能していないようです。何か提案はありますか?そして、この問題の解決策は何ですか?

大変助かります

4

1 に答える 1

1

自分の質問に答えて、検索する人が誰でも役立つようにします。理解しておくべき基本的なポイントは、すべてのファイルを個別にコンパイルしてから、それらをJavaパッケージにグループ化する方法はないということです(同じJavaパッケージに移動する必要のある要素がある場合)。したがって、残っている唯一の方法は、問題を引き起こしているすべてのタイプを分離し(説明したように、いくつかのタイプには複数の定義があります)、それらに対してカスタムバインディングを実行することです(* -bindings.xmlファイルで外部バインディングを使用しました) 。ほとんどの問題を引き起こしていたので、列挙型に注意してください(タイプ、名前付けなど、各列挙型のすべての値をカスタムマップする必要がありました)

教訓:XSDファイルがたわごとである場合、それらをバインドするのに苦労するでしょう

于 2012-10-03T09:42:59.700 に答える