2009-09-29 7 views
6

Używam generowanego kodu wsdl2java Apache CXF do wywoływania metod z usługi sieciowej od jakiegoś czasu, który do tej pory działa dobrze. Problemem, który mam, jest to, że gdy usługa (realizowane tylko na korytarzu ze mną) słusznie zgłasza wyjątek mydła, CXF pojawia się następujący komunikat o błędzie:Wyłapywanie wyjątku usług sieci Web z CXF: NoClassDefFoundError: SOAPFaultBuilder

Could not initialize class com.sun.xml.internal.ws.fault.SOAPFaultBuilder

Używam Ubuntu 9.04, OpenJDK (IcedTea6 1.4.1) 6b14- 1.1.1-0ubuntu11, Maven2 i CXF 2.2.3. Obecnie nie mam pojęcia, jak rozwiązać ten problem, ponieważ kod i ustawienia, których używam, wydają się banalnie proste. Czy ktoś może wskazać mi właściwy kierunek? Daj mi znać, jeśli mogę dodawać żadnych dalszych szczegółów ..

Jest to pełna StackTrace powrócił:

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) 
+1

W CXSFFAQ istnieje wpis "Czy mogę uruchomić w środowisku Java 6", czy to sprawdziłeś? http://cxf.apache.org/faq.html#FAQ-CytatywnieAskedQuestions – skaffman

+0

Hmm, dzięki. Tęskniłem za tą notatką, a teraz dodałem com.sun.xml.indeks jaxb-impl i jaxb-xjc w maven .. Ale do tej pory nie szczęście/zmiana .. Będę pracował w tym więcej .. – Tim

+0

Nie ma szczęścia to Wygląda na to, że wciąż ten sam stacktrace. Czy jest coś, co muszę wykluczyć używając Mavena? – Tim

Odpowiedz

3

Istnieją dwa interesujące rzeczy o tym śladu stosu:

1) To ma problemy znalezienie implementacji SAAJ. Prawdopodobnie może to rozwiązać, dodając do ścieżki klas metodę saaj-impl.jar.

2) W ogóle nie korzysta z CXF. Używa implementacji referencyjnej Sun JAX-WS wbudowanej w procesor. Wygląda więc na to, że słoiki cxf w ogóle nie są odbierane.

+0

Hmm ciekawe (dobrze zauważył!) .. Zajrzę do tej pierwszej rzeczy jutro rano! – Tim

+0

Dzięki, dodanie zależności cxf załatwiło sprawę! Nigdy nie udało mi się dodać cxf jako zależności, ponieważ kod wydawał się działać bez niego ... Głupek. – Tim

4

Miał podobny problem, gdy przełączamy się z Ant do Maven. Używamy Sun JDK 1.6u20.

Mamy brakowało tych bibliotek w Maven zmontowane wojna:

JAXWS-API JAXWS-RT JAXWS-tools

Po dodaniu do nich wszelkie prace, gdyż pracował wcześniej. Mam nadzieję, że to pomoże komuś!