1

私はこれをやっています、

JAXBContext jaxbContext = JAXBContext.newInstance(new Class[] { 
      mine.beans.ObjectFactory.class }); 
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
orderhistory = (OrderHistory) unmarshaller.unmarshal(new StreamSource(
      new StringReader(responseXML)));`

取得してjavax.xml.bind.UnmarshalException: Unexpected element "OrderHistory". Expected elements are "{_http://orderhistory.shc.com/common/domain}OrderHistory".いますが、OrderHistory.javaを確認しました。

@XmlRootElement(name = "OrderHistory")
public class OrderHistory{

私は何が欠けていますか?

package-info.javaファイルも存在します

これが私の応答xmlです。
<?xml version="1.0" encoding="UTF-8"?>
<OrderHistory>
<guid>5555</guid>
<syNumber xsi:nil="true"></syNumber>
<email xsi:nil="true"></email>
<totalPages>0</totalPages>
</OrderHistory>

それでも私は同じ問題に直面していますか?

package-info.javaに変更を加えましたが、名前空間属性を削除しましたが、それでも同じ問題が発生します。

@javax.xml.bind.annotation.XmlSchema() package mine.beans;

4

3 に答える 3

2

入力ドキュメントが名前空間で修飾されていないように見えます。

あなたが持っている:

<OrderHistory>...</OrderHistory>

そして、JAXB(JSR-222)の実装は次のことを期待しています。

<OrderHistory xmlns="_http://orderhistory.shc.com/common/domain">...</OrderHistory>

関連している

DOMからアンマーシャリングする場合は、必ず。setNamespaceAware(true)のインスタンスを呼び出してDocumentBuilderFactoryください。

詳細については

于 2012-08-22T18:24:51.480 に答える
0

ヒントとして。オブジェクトからドキュメントをマーシャリングして、タグが期待どおりに書き込まれているかどうかを確認してください。

于 2012-08-22T18:28:43.440 に答える
0

XMLを変更しようとしましたか?UNmarshallerは、OrderHistory-Elementが「http://orderhistory.shc.com/common/domain」名前空間の一部であることを期待していますが、そうではありません。これを試してみることができます:

<?xml version="1.0" encoding="UTF-8"?>
<OrderHistory xmlns="_http://orderhistory.shc.com/common/domain">
<guid>5555</guid>
<syNumber xsi:nil="true"></syNumber>
<email xsi:nil="true"></email>
<totalPages>0</totalPages>
</OrderHistory>
于 2012-08-24T06:30:24.723 に答える