Domanda

Sto usando Apache CXF WSDL2Java generato il codice da chiamare metodi da un webservice per qualche tempo, che finora ha lavorato bene .. Il problema che sto avendo è che quando il webservice (implementato in fondo al corridoio da me) legittimamente genera un'eccezione sapone, CXF si presenta con il seguente messaggio di errore:

  

Impossibile inizializzare classe 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, come il codice e la configurazione sto usando sembra banalmente semplice .. Chiunque in grado di indicarlo nel giusto senso qui? Fatemi sapere se posso pubblicare ulteriori dettagli ..

Questo è lo 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)
È stato utile?

Soluzione

Ci sono due cose interessanti su quella traccia dello stack:

1) Si tratta di avere problemi a trovare un'implementazione SAAJ. Probabilmente l'aggiunta SAAJ-impl.jar al classpath potrebbe risolvere tale.

2) Non è usando CXF a tutti. E 'con l'implementazione di riferimento Sun JAX-WS che è costruito in JRE. Così, sembra che i barattoli CXF non vengono ritirati presso tutti.

Altri suggerimenti

Ha avuto problema simile quando stiamo passando da Ant a Maven. Usiamo Sun JDK 1.6u20.

Abbiamo perso queste librerie in guerra Maven-assemblato di:

jaxws-api jaxws-rt jaxws-tools

Dopo aver aggiunto di loro tutte le opere in quanto aveva lavorato prima. Spero che questo vi aiuterà qualcuno!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top