ウェブサービスがあることをWSDLで定義されたオブジェクトを返している:私は、このオブジェクトのクラスの情報を印刷するときJAXBを使用しているサービスから返された 'anyType'からJavaオブジェクトを作成する方法は?
<s:complexType mixed="true"><s:sequence><s:any/></s:sequence></s:complexType>
、それはとして起動します:
class com.sun.org.apache.xerces.internal.dom.ElementNSImpl
しかし、私はこれをアンマーシャリングする必要があります次のクラスのオブジェクトとして:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"info",
"availability",
"rateDetails",
"reservation",
"cancellation",
"error" })
@XmlRootElement(name = "ArnResponse")
public class ArnResponse { }
私はマーシャルにどのようにこのオブジェクトのXMLを知っているので、私は、応答が正しいことを知っている:
プリントアウトしMarshaller m = jc.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
m.marshal(rootResponse, System.out);
:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:SubmitRequestDocResponse xmlns:ns2="http://tripauthority.com/hotel">
<ns2:SubmitRequestDocResult>
<!-- below is the object I'm trying to unmarshall -->
<ArnResponse>
<Info />
<Availability>
<!-- etc-->
</Availability>
</ArnResponse>
</ns2:SubmitRequestDocResult>
</ns2:SubmitRequestDocResponse>
をどのように私は私がそれを表している知っているArnResponse
オブジェクトに見ているElementNSImpl
オブジェクトを回すことができますか?
さらに、私はファイルアクセスが制限されているAppEngine上で動作しています。任意のヘルプ
更新ため
ありがとう:私はそうのように、@XmlAnyElement(lax=true)
注釈を追加しました
:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"content"
})
@XmlSeeAlso(ArnResponse.class)
public static class SubmitRequestDocResult {
@XmlMixed
@XmlAnyElement(lax = true)
protected List<Object> content;
しかし、それはどんな違いがありません。
これはコンテンツがList
であるという事実と関係していますか?
は、ここで私は、サーバーから戻ってそれを取得した後、コンテンツにアクセスしようとしているコードです:
2012年1月31日10時04分:出力を持ってい
List list = rootResponse.getSubmitRequestDocResult().getContent(); for (Object o : list) { ArnResponse response = (ArnResponse) o; System.out.println(response); }
: 14 AM com.districthp.core.server.ws.alliance.AllianceApi getRates SEVERE: com.sun.org.apache.xerces.internal.dom.ElementNSImplを com.districthp.core.server.wsにキャストできません。 alliance.response.ArnResponse
回答:
axtavtの答えは、トリックを行いました。これは働いていた:
Object content = ((List)result.getContent()).get(0);
JAXBContext context = JAXBContext.newInstance(ArnResponse.class);
Unmarshaller um = context.createUnmarshaller();
ArnResponse response = (ArnResponse)um.unmarshal((Node)content);
System.out.println("response: " + response);
レスポンスオブジェクトとWSDLのすべてのスキーマのコピーがあります。 – Cuga
ここで使用される 'Node'は' org.w3c.dom.Node'です。 –