Перехват исключения веб-сервиса с помощью CXF: NoClassDefFoundError: SOAPFaultBuilder

Я уже некоторое время использую сгенерированный код Apache CXF wsdl2java для вызова методов из веб-сервиса, который до сих пор работал нормально. Проблема, с которой я сталкиваюсь, заключается в том, что когда веб-сервис (реализованный прямо в коридоре от меня) законно генерирует исключение мыла, CXF выдает следующее сообщение об ошибке:

Не удалось инициализировать класс com.sun.xml.internal.ws.fault.SOAPFaultBuilder.

Я использую Ubuntu 9.04, OpenJDK (IcedTea6 1.4.1) 6b14-1.1.1-0ubuntu11, Maven2 и CXF 2.2.3. В настоящее время я не понимаю, как решить эту проблему, поскольку код и настройка, которые я использую, кажутся тривиально простыми. Кто-нибудь может указать мне правильное направление здесь? Дайте мне знать, если я могу опубликовать дополнительную информацию ..

Это полная трассировка стека:

java.lang.NoClassDefFoundError: Could not initialize class com.sun.xml.internal.ws.fault.SOAPFaultBuilder
    at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:107)
    at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78)
    at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:107)
    at $Proxy36.downloadPDB(Unknown Source)
    at path.to.my.code.downloadInvalidFileID(SingleMethodTest.java:64)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
    at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59)
    at org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:98)
    at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:79)
    at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:87)
    at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77)
    at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42)
    at org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:88)
    at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
    at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
    at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
    at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
    at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
    at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:62)
    at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140)
    at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)
    at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
    at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:338)
    at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:997)

person Tim    schedule 29.09.2009    source источник
comment
В CXSFFAQ есть запись о том, могу ли я запустить Java6, вы это проверяли? cxf.apache.org/faq.html#FAQ-Часто задаваемые вопросы   -  person skaffman    schedule 30.09.2009
comment
Хм, спасибо. Я пропустил это примечание и теперь добавил com.sun.xml.bind jaxb-impl и jaxb-xjc в maven. Но пока не повезло/изменить. Я буду работать над этим еще немного.   -  person Tim    schedule 30.09.2009
comment
Кажется, не повезло: все та же трассировка стека. Возможно, мне нужно что-то исключить, используя Maven?   -  person Tim    schedule 30.09.2009


Ответы (2)


В этой трассировке стека есть две интересные вещи:

1) Проблемы с поиском реализации SAAJ. Вероятно, добавление saaj-impl.jar в путь к классам может решить эту проблему.

2) Он вообще не использует CXF. Он использует эталонную реализацию Sun JAX-WS, встроенную в jre. Таким образом, похоже, что банки cxf вообще не подхватываются.

person Daniel Kulp    schedule 30.09.2009
comment
Хм, интересно (хорошо подмечено!).. Завтра утром первым делом займусь этим! - person Tim; 30.09.2009
comment
Спасибо, добавление зависимости cxf помогло! Никогда не удосужился добавить cxf в качестве зависимости, так как код, казалось, работал без него. Глупый я. - person Tim; 01.10.2009

Была похожая проблема, когда мы переключаемся с Ant на Maven. Мы используем Sun JDK 1.6u20.

Мы пропустили эти библиотеки в maven-assembled war:

jaxws-api jaxws-rt jaxws-инструменты

После их добавления все работает так же, как и раньше. Надеюсь, это поможет кому-то!

person ignatalexeyenko    schedule 17.01.2011