次の設定で XStream エラーが発生します。私は狂っているに違いない。どうしたの?
リクエストクラス
@XStreamAlias("RequestTO")
public class RequestTO {
@XStreamImplicit
private List<SkuMerchTO> skuNumbers;
...
}
ネストされたオブジェクト クラス
@XStreamAlias("skuMerch")
public class SkuMerchTO {
@XStreamAlias("skuNumber")
@XStreamAsAttribute
private Integer skuNumber;
@XStreamAlias("dept")
@XStreamAsAttribute
private Short department;
@XStreamAlias("class")
@XStreamAsAttribute
private Short cls;
@XStreamAlias("subClass")
@XStreamAsAttribute
private Short subClass;
...
}
XML をオブジェクトにデコードする XStream コード:
XStream stream = new XStream();
stream.processAnnotations(SkuMerchTO.class);
stream.processAnnotations(RequestTO.class);
RequestTO request = (RequestTO)stream.fromXML(requestXml);
XML 入力文字列:
<RequestTO>
<skuMerch skuNumber="123456" dept="1" class="2" subClass="3"/>
<skuMerch skuNumber="234567" dept="4" class="5" subClass="6"/>
</RequestTO>
Stacktrace のエラー:
---- デバッグ情報 ----
メッセージ: 2 : 2
原因例外: com.thoughtworks.xstream.mapper.CannotResolveClassException
原因メッセージ: 2 : 2
クラス: [...]RequestTO
必須タイプ: [...]SkuMerchTO
パス: /RequestTO/skuNumberList/skuMerch
行番号: 3
. ------------------------------- -
com.thoughtworks.xstream.converters.ConversionException: 2 : 2 : 2 : 2
---- デバッグ情報 ----
メッセージ : 2 : 2
cause-exception : com.thoughtworks.xstream.mapper.CannotResolveClassException
cause-message : 2:2
クラス: [...]
RequestTO 必須タイプ:[..]SkuMerchTO
パス: /RequestTO/skuNumberList/skuMerch
行番号: 3
.-------------------- -----------
オブジェクトを作成して toXML を実行すると、次のようになります。
<RequestTO>
<skuMerch skuNumber="0" dept="1" class="2" subClass="2"/>
<skuMerch skuNumber="1" dept="1" class="2" subClass="2"/>
<skuMerch skuNumber="2" dept="1" class="2" subClass="2"/>
</RequestTO>
編集: 陽気なことは、これを行う場合:
stream.fromXML(stream.toXML(object));
from XML 部分ではまだ失敗します。