gpt4 book ai didi

java - 如何解决这个 AbstractMethodError?

转载 作者:行者123 更新时间:2023-11-29 04:28:54 30 4
gpt4 key购买 nike

当我在 ant 中运行 junit 测试时出现以下错误。测试类需要调用web service API。

有人可以帮忙解决吗?

<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 ... ...

最佳答案

我只是自己找到了根本原因。

根据 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>

关于java - 如何解决这个 AbstractMethodError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44689265/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com