2009-09-29 9 views
6

Ho utilizzato il codice generato da wsdl2java di Apache CXF per chiamare metodi da un webservice da qualche tempo, che finora ha funzionato correttamente. Il problema che sto avendo è che quando il webservice (implementato in fondo al corridoio da me) genera legittimamente un'eccezione sapone, CXF si presenta con il seguente messaggio di errore:Eccezione webservice di cattura con CXF: NoClassDefFoundError: SOAPFaultBuilder

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

sto usando Ubuntu 9.04, OpenJDK (icedtea6 1.4.1) 6b14- 1.1.1-0ubuntu11, Maven2 e CXF 2.2.3. Sono attualmente in perdita su come risolvere questo problema, in quanto il codice e l'installazione che sto utilizzando sembra banalmente semplice. Chiunque è in grado di indicarmi la giusta direzione qui? Fatemi sapere se posso pubblicare ulteriori dettagli ..

Questa è la stacktrace piena restituito:

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

C'è una voce "posso eseguire sotto Java6" in CXSFFAQ, hai controllato? http://cxf.apache.org/faq.html#FAQ-FrequentlyAskedQuestions – skaffman

+0

Hmm, grazie. Ho perso quella nota, e ora ho aggiunto com.sun.xml.bind jaxb-impl e jaxb-xjc in Maven .. Ma finora non ho avuto fortuna/cambio .. Ci lavorerò ancora un po '.. – Tim

+0

No luck it sembra: sempre lo stesso stacktrace .. C'è qualcosa che devo escludere usando Maven forse? – Tim

risposta

3

Ci sono due cose interessanti su quella traccia dello stack:

1) che sta avendo problemi trovare un'implementazione SAAJ. Probabilmente l'aggiunta di saaj-impl.jar al classpath potrebbe risolverlo.

2) Non sta utilizzando CXF. Sta usando l'implementazione di riferimento Sun JAX-WS integrata nel jre. Pertanto, sembra che i barattoli cxf non vengano affatto rilevati.

+0

Hmm interessante (ben individuato!) .. Approfondirò questa prima cosa domani mattina! – Tim

+0

Grazie, l'aggiunta della dipendenza cxf ha fatto il trucco! Non sono mai riuscito ad aggiungere cxf come dipendenza, dato che il codice sembrava funzionare senza di esso .. Sciocco. – Tim

4

Aveva un problema simile quando passiamo da Ant a Maven. Usiamo Sun JDK 1.6u20.

abbiamo perso queste librerie a Maven-assemblato guerra:

jaxws-API jaxws-RT jaxws-tools

Dopo aver aggiunto di loro tutte le opere come aveva lavorato prima. Spero che questo aiuti qualcuno!

Problemi correlati