2017-06-22 38 views
1

當我在螞蟻中運行junit測試時,我得到了錯誤。 測試類需要調用Web服務API。如何解決AbstractMethodError?

有人可以幫助解決它嗎?

<error message="javax.xml.transform.TransformerFactory.setFeature(Ljava/lang/String;Z)V" type="java.lang.AbstractMethodError">java.lang.AbstractMethodError: javax.xml.transform.TransformerFactory.setFeature(Ljava/lang/String;Z)V 
at com.sun.xml.ws.util.xml.XmlUtil.newTransformerFactory(XmlUtil.java:392) 
at com.sun.xml.ws.util.xml.XmlUtil.newTransformerFactory(XmlUtil.java:400) 
at com.sun.xml.ws.util.xml.XmlUtil.&lt;clinit&gt;(XmlUtil.java:233) 
at com.sun.xml.ws.client.WSServiceDelegate.createCatalogResolver(WSServiceDelegate.java:377) 
at com.sun.xml.ws.client.WSServiceDelegate.parseWSDL(WSServiceDelegate.java:363) 
at com.sun.xml.ws.client.WSServiceDelegate.&lt;init&gt;(WSServiceDelegate.java:321) 
at com.sun.xml.ws.client.WSServiceDelegate.&lt;init&gt;(WSServiceDelegate.java:230) 
at com.sun.xml.ws.client.WSServiceDelegate.&lt;init&gt;(WSServiceDelegate.java:211) 
at com.sun.xml.ws.client.WSServiceDelegate.&lt;init&gt;(WSServiceDelegate.java:207) 
at com.sun.xml.ws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:114) 
at javax.xml.ws.Service.&lt;init&gt;(Service.java:77) 
at com.citi.isg.amg.ws.client.AccountManagerWs.&lt;init&gt;(AccountManagerWs.java:42) 
at ... ... 

+0

@ GhostCat,我分享我的解決方案。謝謝。 –

回答

3

我只是我自己發現的根本原因。

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

似乎我沒有在rt.jar中爲抽象類javax.xml.transform.TransformerFactory指定實現。

下面的添加內Junit的

<sysproperty key="javax.xml.transform.TransformerFactory" 
         value="com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl"/> 

使得它的工作原理。

所以最終的junit任務看起來象下面這樣:

<junit showoutput="true" printsummary="yes" fork="true" forkmode="once"> 
      <classpath refid="junit.runtime.classpath" /> 
      <sysproperty key="javax.xml.transform.TransformerFactory" 
         value="com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl"/> 
      <batchtest haltonfailure="no" todir="${test.result.dir}"> 
       <fileset dir="${test.src.dir}"> 
        <include name="**/*Test.java" /> 
       </fileset> 
       <formatter type="xml" /> 
      </batchtest> 
     </junit>