作为测试项目,我使用wsdl和jax-ws创建了一个非常简单的WebService。如果客户端在GlassFish中部署为Web应用程序,但是如果我直接在Eclipse中启动相同的(WebService-)代码,则会出现以下错误:
WARNUNG: Input Action on WSDL operation AddNumbers and @Action on its associated Web Method addNumbers did not match and will cause problems in dispatching the requests
Exception in thread "main" java.lang.NoClassDefFoundError: org/glassfish/ha/store/api/BackingStoreException
at com.sun.xml.ws.rx.mc.runtime.McConfigurationFactory.createInstance(McConfigurationFactory.java:66)
at com.sun.xml.ws.rx.mc.runtime.McTubeFactory.createTube(McTubeFactory.java:68)
at com.sun.xml.ws.assembler.TubeCreator.createTube(TubeCreator.java:84)
at com.sun.xml.ws.assembler.TubelineAssemblerFactoryImpl$MetroTubelineAssembler.createClient(TubelineAssemblerFactoryImpl.java:130)
at com.sun.xml.ws.client.Stub.createPipeline(Stub.java:228)
at com.sun.xml.ws.client.Stub.<init>(Stub.java:205)
at com.sun.xml.ws.client.Stub.<init>(Stub.java:178)
at com.sun.xml.ws.client.sei.SEIStub.<init>(SEIStub.java:85)
at com.sun.xml.ws.client.WSServiceDelegate.createEndpointIFBaseProxy(WSServiceDelegate.java:608)
at com.sun.xml.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:348)
at com.sun.xml.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:330)
at com.sun.xml.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:312)
at javax.xml.ws.Service.getPort(Service.java:134)
at mnm.namedesdienstes.webservice.service.NameDesDienstesService.getNameDesDienstesPortTypePort(NameDesDienstesService.java:56)
at webserviceClient.NameDesDienstesClient.myTest(NameDesDienstesClient.java:12)
at webserviceClient.NameDesDienstesClient.main(NameDesDienstesClient.java:25)
Caused by: java.lang.ClassNotFoundException: org.glassfish.ha.store.api.BackingStoreException
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 16 more
经过一番研究后,我发现它必须与某些库文件的不同版本有关。所以现在我的问题是,如何“修复”我的eclipse java执行来正确运行我的webservice客户端?我发现了一些技巧,可以将一些jar复制到一个endorsed-directory,但哪个jar到哪个目录: - )
我正在使用Max OS 10.6.8,Eclipse Project使用JVM 1.6。我的Mac Java版本是
xmacbook:~ cstraube$ java -version
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03-384-10M3425)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02-384, mixed mode)
更新:我的第一次尝试(感谢来自remipod的链接)我执行了以下步骤:
System.out.println(System.getProperty("java.endorsed.dirs"));
答案 0 :(得分:11)
在tomcat 7中部署Web服务(JAX-WS)时,我遇到了类似的问题。
缺少的类定义可以在ha-api.jar中找到。
org/glassfish/ha/store/api/BackingStoreException
您应该将ha-api.jar(来自JAX-WS发行版)添加到服务器lib中。对于我的情况,eclipse运行tomcat 7,所以位置是(Tomcat 7.0 \ lib)。
答案 1 :(得分:3)
您必须将fitting版本的jaxws-api.jar和jaxb-api.jar复制到目录/ Library / Java / Home / lib / endorsed(Mac)中。
答案 2 :(得分:1)
请查看此链接JAX WS with WS 2.1.1。您需要优先使用jre 1.6中提供的jaxws版本的jaxws。
修改强> Glassfish已经包含了一些库,以及java 6.我必须在glassfish 3.1 / 3.1.1和java 6/7中跟踪与jaxws的版本冲突。您可以检查eclipse用于启动应用程序并查找的确切java运行时有效类路径上的重复jar。
认可机制只是提供了一种简单且容易出错的方式来覆盖所包含的jaxws发行版。容易出错,因为你的同事会遇到同样的问题。
我在jaxws的上下文中没有看到异常org.glassfish.ha.store.api.BackingStoreException。您的版本冲突可能由另一个库创建,而不是jaxws ......
答案 3 :(得分:1)
我遇到了完全相同的异常
org.glassfish.ha.store.api.BackingStoreException
在确保我的JAX-WS和JAX-B罐子都是相同版本后,问题仍然存在。
THE FIX :然后我将ha-api.jar
添加到WEB-INF \ lib目录中,这解决了这个问题。
这里的线索是&#34; ha&#34;如上所示,在例外类路径中打包。希望这有帮助!