junit 如何解决此AbstractMethodError?

tktrz96b  于 2023-05-17  发布在  其他
关注(0)|答案(2)|浏览(252)

当我在ant中运行junit测试时,我得到以下错误。测试类需要调用Web服务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 ... ...
9w11ddsr

9w11ddsr1#

我自己找到了根本原因。
根据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>
x7rlezfr

x7rlezfr2#

专门针对TransformerFactory.setFeature的替代解释:看来某些实现(例如,xalan-2.6.0)提供了不实现该方法的TransformerFactory实现;较新版本的Xalan(例如,2.7.3)确实提供了该方法,AbstractMethodError就会消失。

相关问题