Как решить этот AbstractMethodError?

59
6

Я получил ошибку ниже, когда я запускаю тест юнита в муравье. Для тестового класса требуется 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.<clinit>(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.<init>(WSServiceDelegate.java:321)
at com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:230)
at com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:211)
at com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:207)
at com.sun.xml.ws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:114)
at javax.xml.ws.Service.<init>(Service.java:77)
at com.citi.isg.amg.ws.client.AccountManagerWs.<init>(AccountManagerWs.java:42)
at ... ...

спросил(а) 2017-06-22T05:42:00+03:00 3 года, 5 месяцев назад
1
Решение
83

Я сам нашел причину.

В Oracle Documentation, java.lang.AbstractMethodError вызывается, когда приложение пытается вызвать абстрактный метод. Обычно эта ошибка улавливается компилятором; эта ошибка может возникнуть только во время выполнения, если определение какого-либо класса несовместимо изменилось с тех пор, как последний исполняемый метод был скомпилирован.

Кажется, я не указал реализацию абстрактного класса javax.xml.transform.TransformerFactory в rt.jar.

Добавление ниже внутри 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>

ответил(а) 2017-06-23T05:36:00+03:00 3 года, 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема