以下是抛出AbstractMethodError
的示例代码块:
import org.w3c.dom.Node;
..
Node root = soapBody.getElementByTagNameNS("http://xxx.xxx/Schema/v9", "Result").item(0); //Namespace
for (int i = 0; i < root.getChildNodes().getLength(); i++) {
Node child = root.getChildNodes().item(i); //Set to SubResult
String result = child.getTextContent(); //Throws error
}
样品肥皂回复:
soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Header/><soapenv:Body><a1:Response xmlns:a1="http://xxx.xxx/Schema/v9"><a1:SubResult>50</<a1:SubResult></a1:Response></soapenv:Body></soapenv:Envelope>
抛出错误:
java.lang.AbstractMethodError: org.apache.axis.message.MessageElement.getTextContent()Ljava/lang/String;
使用的Java版本:1.5
Tomcat版本 - 6.0.41
选中org.w3c.dom.Node for 1.5,它确实有方法getTextContent()
出现此错误的可能原因是什么?
另外,为什么会出现这种情况:org.apache.axis.message.MessageElement
而不是org.w3c.Node
?
答案 0 :(得分:1)
javadoc of the AbstractMethodError说:
当应用程序尝试调用抽象方法时抛出。一般, 编译器捕获此错误;此错误只能在运行时发生 时间,如果某个类的定义自那以后不一致改变了 最后编译了当前正在执行的方法。
所以看起来你的类路径中有一些不兼容的版本。
org.apache.axis.message.MessageElement
是Axis的一部分,应该实现org.w3c.dom.Node
,因此这两个版本似乎不匹配。确保在类路径中有两个匹配的版本。