2009-09-29 13 views
6

He estado usando el código generado por Apache CXF wsdl2java para llamar a métodos desde un servicio web desde hace algún tiempo, que hasta ahora funcionaba bien ... El problema que tengo es que cuando el servicio web (implementado al final del pasillo de mí) legítimamente una excepción de jabón, CXF viene con el siguiente mensaje de error:Captura de la excepción de servicio web con CXF: NoClassDefFoundError: SOAPFaultBuilder

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

estoy usando Ubuntu 9.04, OpenJDK (icedtea6 1.4.1) 6b14- 1.1.1-0ubuntu11, Maven2 y CXF 2.2.3. Actualmente no sé cómo resolver este problema, ya que el código y la configuración que estoy usando parecen trivialmente simples. ¿Alguien puede indicarme la dirección correcta aquí? Déjame saber si puedo publicar más detalles ..

Ésta es la StackTrace completa regresó:

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

Hay una entrada "puedo ejecutar bajo Java6" en el CXSFFAQ, ¿lo ha comprobado? http://cxf.apache.org/faq.html#FAQ-FrequentlyAskedQuestions – skaffman

+0

Hmm, gracias. Me perdí esa nota, y ahora he añadido com.sun.xml.bind jaxb-impl & jaxb-xjc en maven ... Pero hasta ahora no tuve suerte/cambio ... Trabajaré en esto un poco más ... – Tim

+0

No tengo suerte parece: sigue siendo el mismo stacktrace ... ¿Hay algo que necesite excluir usando Maven tal vez? – Tim

Respuesta

3

Hay dos cosas interesantes acerca de que la pila de traza:

1) que está teniendo problemas encontrar una implementación de SAAJ. Probablemente agregar saaj-impl.jar al classpath podría resolver eso.

2) No está utilizando CXF en absoluto. Está utilizando la implementación de referencia Sun JAX-WS incorporada en el jre. Por lo tanto, parece que los frascos cxf no se recogen en absoluto.

+0

Hmm interesante (¡bien visto!) .. ¡Lo veré a primera hora mañana por la mañana! – Tim

+0

Gracias, agregando la dependencia cxf hizo el truco! Nunca llegué a agregar cxf como una dependencia, ya que el código parecía funcionar sin él ... Tonto. – Tim

4

Tuve un problema similar cuando cambiamos de Ant a Maven. Usamos Sun JDK 1.6u20.

nos hemos perdido estas bibliotecas en la guerra del experto-ensamblados:

JAXWS-API JAXWS-RT JAXWS-tools

Después de la adición de ellos todas las obras, ya que había trabajado antes. ¡Espero que esto ayude a alguien!

Cuestiones relacionadas