我一直在使用Apache CXF wsdl2java生成的代码从web服务调用方法已经有一段时间了,到目前为止一直工作正常..我遇到的问题是当webservice(在我的大厅下面实现)合法地抛出一个soap异常,CXF出现以下错误信息:
无法初始化类com.sun.xml.internal.ws.fault.SOAPFaultBuilder
我使用的是Ubuntu 9.04,OpenJDK(IcedTea6 1.4.1)6b14-1.1.1-0ubuntu11,Maven2和CXF 2.2.3.我目前对如何解决这个问题感到茫然,因为我使用的代码和设置似乎很简单..任何人都能指出我在正确的方向吗?如果我可以发布任何进一步的细节,请告诉我..
这是返回的完整堆栈跟踪:
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)
Run Code Online (Sandbox Code Playgroud) 我在maven库中使用Jaxb-impl-2.1.3.jar ..每个东西在pom条目中看起来都很好..如果有人遇到这个错误请求给我一个想法..
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.aop.aspectj.AspectJAfterAdvice.invoke(AspectJAfterAdvice.java:42)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:80)
at
Caused by: 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)
Run Code Online (Sandbox Code Playgroud) 我们的实时环境中的Web服务客户端最近发生了例外:
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:135)
at com.sun.proxy.$Proxy146.search(Unknown Source)
....
Run Code Online (Sandbox Code Playgroud)
我已经做了很多在线搜索,包括StackOverflow上的一些帖子:
使用CXF捕获Web服务异常:NoClassDefFoundError:SOAPFaultBuilder
无法初始化com.sun.xml.internal.ws.fault.SOAPFaultBuilder类
java.lang.NoClassDefFoundError:无法初始化com.sun.xml.internal.ws.fault.SOAPFaultBuilder类
我的理解是我们的客户端从服务器收到了SOAP错误,并且缺少一些jar文件。因此,我正在尝试通过重新创建解决该问题。
我在Eclipse中创建了一个简单的Web服务服务器项目,该项目具有一个Web方法,该方法抛出一个由注释的简单故障类@WebFault。然后,我创建了一个使用Web方法的简单Web服务客户端项目。客户端项目的类路径中没有任何其他库/ jar;它仅有的就是JRE。令我惊讶的是,它没有引发NoClassDefFoundError异常!相反,我javax.xml.ws.soap.SOAPFaultException在服务器端定义了I。
该类SOAPFaultBuilder确实位于JRE的rt.jar中。因此,我创建的简单Web服务项目可能会按预期工作。但是,我们的实时环境中的Web服务客户端如何引发NoClassDefFoundError异常?该项目肯定在类路径中有rt.jar。
任何人都可以阐明这个问题吗?如果缺少一些jar文件(来自jaxws RI或Apache CXF或其他文件),为什么我创建的超级简单客户端没有抛出错误?实时环境和本地环境都使用Java7u51。