Web服务正在返回由WSDL定义的对象,该对象为:
当我打印出该对象的类信息时,它显示为:
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);
打印出:
如何将ElementNSImpl看到的ArnResponse对象变成我知道的对象?
此外,我在AppEngine上运行,该文件访问受到限制。
谢谢你的帮助
更新 :
我添加了@XmlAnyElement(lax=true)注释,如下所示:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"content"
})
@XmlSeeAlso(ArnResponse.class)
public static class SubmitRequestDocResult {
@XmlMixed
@XmlAnyElement(lax = true)
protected List content;
但这没有任何区别。
这与内容是的事实有关List吗?
这是从服务器取回内容后要尝试访问的代码:
List list = rootResponse.getSubmitRequestDocResult().getContent();
for (Object o : list) {
ArnResponse response = (ArnResponse) o;
System.out.println(response);
}
具有以下输出:
2012年1月31日,上午10:04:14 com.districthp.core.server.ws.alliance.AllianceApi
getRates严重: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);