JAX-WS和版本冲突

str*_*rry 4 java eclipse web-services

作为测试项目,我使用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
Run Code Online (Sandbox Code Playgroud)

经过一些研究,我发现它必须与某些库文件的不同版本有关.所以现在我的问题是,如何"修复"我的eclipse java执行来正确运行我的webservice客户端?我找到了一些提示,将一些jar复制到一个endorsed目录,但是哪个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)
Run Code Online (Sandbox Code Playgroud)

更新:我的第一次尝试(感谢remipod的链接)我执行了以下步骤:

  1. 获取认可的lirbaries目录 System.out.println(System.getProperty("java.endorsed.dirs"));
  2. 接下来,我将两个文件JAXWS2.1.7-20090419.jar和JAXB2_20080513.jar(两个版本2.1.7)复制到此目录中
  3. 不幸的是我仍然遇到同样的错误

ind*_*rap 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).