2

現在、JAXB を介して XML ドキュメントを非整列化しようとしています。プロジェクト内ですでに JAXB クラスを生成しており、ルート クラスに @XmlRootElement のアノテーションを付けています。

残念ながら、非整列化を試みると、次の例外が発生します。

java.lang.ClassCastException: javax.xml.bind.JAXBElement cannot be cast to a.b.Foo

私の Foo クラスには適切な注釈があり、私が知る限り、これは私の XML を Foo クラスにアンマーシャリングできるはずです。

これを引き起こす原因について何か考えはありますか?

編集(明確化のため):非整列化しようとしている呼び出しは次のとおりです。

Foo foo = (Foo)unmarshaller.unmarshal(input);

2 回目 の更新 スキーマの更新は許可されていませんが、以下は 'Foo' 要素に対する XML スキーマ構造です...

<xsd:element name="Foo" type="Foo_Type"/>
<xsd:complexType name="Foo_Type">
    <!-- more schema definition here -->
</xsd:complexType>

次に、JAXB バインディングを介して @XmlRootElement 注釈を Foo クラスに追加します。スキーマを次のように変更すると、次のようになることがわかりました。

<xsd:element name="Foo">
    <xsd:complexType>
        <!-- more schema definition here -->
    </xsd:complexType>
</xsd:element>

すべて正常に動作しますが、繰り返しになりますが、スキーマを更新することは想定されていません。

4

1 に答える 1

1

アノテーションを持つクラスは、パラメーターを受け取るメソッドのいずれかが使用され@XmlRootElementている場合にのみ、 のインスタンスに非整列化する必要があります。JAXBElementunmarshalClass


アップデート

非整列化コードが次の場合:

Foo foo = (Foo)unmarshaller.unmarshal(input);

@XmlElementDecl次に、クラスに対応するon a クラスが必要@XmlRegistryです (デフォルトではObjectFactory、モデルが XML スキーマから生成されるときにこのクラスが呼び出されます) Foo。これについては、ブログで詳しく書いています。

于 2015-06-05T19:26:15.740 に答える