La captura de excepción servicio web con CXF: NoClassDefFoundError: SOAPFaultBuilder
Pregunta
He estado usando Apache CXF wsdl2java genera código para llamar a métodos de un servicio web desde hace algún tiempo, que hasta ahora ha estado trabajando muy bien .. El problema que estoy teniendo es que cuando el servicio web (implementado al final del pasillo de mí) legítimamente emitirá una excepción jabón, CXF viene con el siguiente mensaje de error:
No se pudo inicializar la clase 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 estoy en una pérdida sobre cómo resolver este problema, ya que el código y la configuración que estoy usando parece trivialmente sencilla .. Cualquier persona capaz de apuntar en la dirección correcta aquí? Déjame saber si puedo publicar más detalles ..
Este es el 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)
Solución
Hay dos cosas interesantes acerca de eso seguimiento de la pila:
1) Se trata de tener problemas para encontrar una implementación SAAJ. añadiendo probablemente saaj-impl.jar a la ruta de clase podría resolver eso.
2) No es el uso de CXF en absoluto. Se trata de utilizar la implementación de referencia de Sun JAX-WS que se construye en el JRE. Por lo tanto, parece que los frascos CXF no están siendo recogidos en absoluto.
Otros consejos
Tenía un problema similar cuando estamos cambiando de Ant para Maven. Utilizamos Sun JDK 1.6u20.
Hemos perdido estas bibliotecas en la guerra experto-ensamblados de:
jaxws-api jaxws-rt JAXWS-herramientas
Después de la adición de ellos todas las obras, ya que habían trabajado antes. Esperamos que esto ayude a alguien!