2015-10-26 80 views
1

下面是示例碼塊投擲AbstractMethodErrorAbstractMethodError上Node.getTextContent()

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

回答

1

javadoc of the AbstractMethodError說:

當應用程序試圖調用一個抽象方法拋出。通常, 這個錯誤被編譯器捕獲;如果某個類的定義自 上次編譯以來已發生不兼容的更改,則此錯誤只能在運行 時發生。

所以它看起來像你的類路徑中有一些不兼容的東西版本。

org.apache.axis.message.MessageElement是安訊士的一部分,應該實施org.w3c.dom.Node,因此這兩個版本似乎不匹配。確保你的類路徑中有兩個匹配的版本。

+0

謝謝@Jens!我有點困惑。實際的代碼不僅有'getTextContent()',而且還有其他函數,如:getChildNodes(),hasChildNodes(),getNodeName()另外,當你說版本不匹配時,你指的是哪個jar版本? – allout

+0

罐子,其中包含類/接口 –

+0

只有一個包含org.w3c.dom.Node。然而,就像我前面提到的那樣,'getTextNode()'是唯一不起作用的,Java 1.5已經有了這個方法。 – allout

相關問題