2

現在、XML メッセージのマーシャリング/アンマーシャリングに取り組んでいます。ここに私の2つのXML要素があります:

@XmlRootElement(namespace = "http://namespaceA")
public class RootElementA {

    @XmlElement
    private ElementXX elementXX;

}

@XmlRootElement(namespace = "http://namespaceB")
public class RootElementB {

    @XmlElement
    private ElementXX elementXX;

}

RootElementB をアンマーシャリングすると、次のエラーが発生します。

javax.xml.bind.UnmarshalException: unexpected element (uri:"http://namespaceB", local:"ElementXX"). Expected elements are <{}ElementXX>

名前空間を ElementXX 宣言に追加すると、ElementXX のプロパティで発生することを除いて、同じエラーが発生します。

問題は、ElementXX のプロパティに名前空間を設定できないことです。これは、両方の名前空間で指定されており、名前空間を変更するためだけにクラスを複製したくないためです...

アイデアはありますか?ありがとう。

編集

XML のサンプルは次のとおりです。

<RootElementA xmlns="http://namespaceA">
    <ElementXX>
        <name>blabla</name>
        <desc>blabla</desc>
    </ElementXX>
</RootElementA>

XmlRootElementA クラスで名前空間を ElementXX に設定しないと、上記のエラーが発生します。設定すると、同じエラーが発生しますが、名前プロパティが対象です。

4

3 に答える 3

1

@XmlElementの注釈を削除できますElementXX。public getter がある限り、デフォルトの動作はそれもマーシャリングします。

XML は次のようになります。

<ns3:rootElementB xmlns:ns2="http://namespaceA" xmlns:ns3="http://namespaceB">
    <elementXX/>
</ns3:rootElementB>

別の方法として、RootElementA および B と同様にElementXXJava クラスでの名前空間を宣言します。次に、RootElementA および Bをに置き換えます。@XmlRootElement@XmlElement@XmlElementRef

XML は次のようになります: (: テスト用にフィールド名を追加しました)

<ns4:rootElementB xmlns:ns2="http://namespaceXX" xmlns:ns3="http://namespaceA" xmlns:ns4="http://namespaceB">
    <ns2:elementXX>
        <name>test</name>
    </ns2:elementXX>
</ns4:rootElementB>

エラーを正確に再現できませんでした。ただし、ElementXX控えめに言っても、2 つの名前空間で宣言することはお勧めできません。スキーマを変更できる場合は、独自の名前空間を持つ新しいスキーマを作成し、その中で宣言することをお勧めしますElementXX。次に、その要素を参照するように他の 2 つを変更します。

于 2013-09-03T11:06:31.190 に答える
0

You can use the @XmlSchema annotation to specify the namespace qualification for classes and properties within a package. You can specify the namespace for the properties of a class by specifying the namespace on @XmlType. Then you can specify the namespace for a so single element/attribute using @XmlRootElement, @XmlElement, and @XmlAttribute.

For More Information

于 2013-09-03T11:32:51.060 に答える
0

あなたは見てみるためにここにxmlを持っていませんでした..しかし、私は以下のリンクがあなたに答えを与えると思います.

名前空間とスキーマで Jaxb を使用した XML アンマーシャリング

アンマーシャリングしようとしているxmlを投稿しない場合。

于 2013-09-03T10:42:06.210 に答える