29

JAXBを使用して処理される2つのスキーマがあります。最初のスキーマは前処理され、この情報はエピソードファイル( http://www.java.net/blog/2006/09/05/separate-compilation-jaxb-ri-21に続く)を使用して使用されます。2番目のスキーマは最初のスキーマをインポートし、再びjaxbを使用して処理されます。これはすべて期待どおりに機能します。

しかし今、私は最初のスキーマに要素を持っています。これは、参照を使用して2番目のスキーマで使用されます。

スキーマa:

<schema elementFormDefault="qualified" xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:test="http://www.example.org/Test/"
targetNamespace="http://www.example.org/Test/">
<element name="type" type="test:MyType"></element>

スキーマb:

<schema elementFormDefault="qualified" 
xmlns="http://www.w3.org/2001/XMLSchema" 
xmlns:second="http://www.example.org/Second/"
xmlns:test="http://www.example.org/Test/"
targetNamespace="http://www.example.org/Second/">

<import namespace="http://www.example.org/Test/" />

<complexType name="SomeType">
    <sequence>
        <element ref="test:type" minOccurs="1" maxOccurs="unbounded" />
    </sequence>
</complexType>

処理中は何も問題はありませんが、両方のスキーマに対して生成されたコードは同じメソッドを提供します。

public JAXBElement<EventType> createType(TypeType value)

実行時に、これにより次のエラーが発生します。

com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of 
    IllegalAnnotationExceptions
The element name {http://www.example.org/Type/}type has more than one mapping.

JAXBが重複するcreateTypeメソッドを作成しないようにするにはどうすればよいですか?

前もって感謝します!

更新:JAXBメーリングリストでこれと同じ質問をしました。そのリストに実際の例も投稿しました。スレッドと例は次の場所にあります:http://java.net/projects/jaxb/lists/users/archive/2011-03/message/18

このリストでは、回避策が提案されており、スキーマを好きなように使用できるようになりました。ただし、JAXBは、エピソードファイルにすでに存在しているはずなので、追加の「create」メソッドを作成するべきではないと思います。

4

1 に答える 1

1

私は私の日にいくつかのスキーマ定義を書きました。2番目のスキーマ宣言で最初のxsdを宣言してから、それをインポートします。

MSDNによると、XSDをインポートするときは、それをスキーマ宣言に含めません。これは、スキーマ宣言のどこにあります。

xmlns:test = "http://www.example.org/Test/"

これを削除して、インポートを実行してください...( <xs:import namespace="http://www.example.com/IPO" />

参照: http: //msdn.microsoft.com/en-us/library/ms256480.aspx

于 2011-05-03T22:31:39.307 に答える