我正在遵循预定义的WSDL(和xsd)来发送和接收Web服务调用。发送Web服务发送Any类型的对象。我能发好。当我收到回复时,我们会得到一个Any元素列表。以下是我们使用的代码:
List<Object> list = academicRecordBatch.getBatchContent().getAny();
if (list != null && list.size() > 0) {
Log.debug("got : "+ list.get(0).getClass().getName());
K12StudentType k12StudentType = (K12StudentType) list.get(0); //error on this line
}
这会产生以下错误: [java] 2011-05-10 09:52:53,707 DEBUG [com.mycompany.is.Test] main(第42行):返回的对象:org.pesc.message.academicrecordbatch.v2_0.AcademicRecordBatch@483bead5 [java] java.lang.ClassCastException:com.sun.org.apache.xerces.internal.dom.ElementNSImpl无法强制转换为org.pesc.sector.academicrecord.v1_4.K12StudentType
看起来返回的是ElementNSImpl列表。如何从中提取我的K12StudentType对象?
我很感激任何建议。
答案 0 :(得分:3)
您是否正在访问从Java客户端返回DataSet的.NET Web服务? 无论如何,试试这个: 让我们说变量&#39; o&#39;显示为ElementNSImpl对象。将其转换为org.w3c.dom.Node对象,然后使用DOM方法导航现在通过Node对象提供的返回XML。
import org.w3c.dom.*; // Add this import.
Object o = objs.get(0); // the ElementNSImpl object.
Node dataSetNode = (Node)o;
// Some more code for illustration..
if (dataSetNode != null) {
Node tableNode = dataSetNode.getFirstChild();
if (tableNode != null) {
Node dataElementNode = tableNode.getFirstChild();
while (dataElementNode != null) {
String text = dataElementNode.getTextContent();
String name = dataElementNode.getNodeName();
System.out.format("%s: %s\n", name, text);
dataElementNode = dataElementNode.getNextSibling();
}
}
答案 1 :(得分:1)
ElementNSImpl
实现了Node
接口,此link解释了如何解组节点对象。我从来没有尝试过。