【问题标题】:JAX-WS and version conflictsJAX-WS 和版本冲突
【发布时间】:2011-09-28 09:05:31
【问题描述】:

作为测试项目,我使用 wsdl 和 jax-ws 创建了一个非常简单的 WebService。如果客户端在 GlassFish 中部署为 Web 应用程序,则客户端运行良好,但如果我直接在 Eclipse 中启动相同的 (WebService-)Code,则会收到以下错误:

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 执行以正确运行我的 web 服务客户端?我发现了一些将一些 jar 复制到背书目录的技巧,但是哪些 jar 到了哪个目录:-)

我使用的是 Max OS 10.6.8,Eclipse 项目使用的是 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 的链接)我执行了以下步骤:

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

【问题讨论】:

标签: java eclipse web-services


【解决方案1】:

在 tomcat 7 中部署 Web 服务 (JAX-WS) 时,我遇到了类似的问题。 可以在 ha-api.jar 中找到缺少的类定义。

org/glassfish/ha/store/api/BackingStoreException

您应该将 ha-api.jar(来自 JAX-WS 分发版)添加到服务器库中。就我而言,eclipse运行tomcat 7,所以位置是(Tomcat 7.0\lib)。

【讨论】:

    【解决方案2】:

    您必须将 fitting 版本的 jaxws-api.jar 和 jaxb-api.jar 复制到目录 /Library/Java/Home/lib/endorsed (Mac)。

    【讨论】:

    • 您可能需要添加 ha-api.jar(记住版本),因为这为我修复了它。
    【解决方案3】:

    看看这个链接JAX WS with WS 2.1.1。您需要将您的 jaxws 版本优先于 jre 1.6 中提供的 jaxws。

    编辑: Glassfish 已经包含一些库,以及 java 6。我必须在 glassfish 3.1 / 3.1.1 和 java 6 / 7 中跟踪与 jaxws 的版本冲突。您可以检查确切的 java runtime eclipse 用于启动应用程序并查找在有效的类路径上重复 jar。

    认可机制只是提供了一种简单且容易出错的方法来覆盖包含的 jaxws 分发。容易出错,因为你的同事也会遇到同样的问题。

    我没有在 jaxws 的上下文中看到异常 org.glassfish.ha.store.api.BackingStoreException。您的版本冲突可能是由 jaxws 以外的其他库创建的...

    【讨论】:

      【解决方案4】:

      我遇到了完全相同的异常

      org.glassfish.ha.store.api.BackingStoreException

      在确保我的 JAX-WS 和 JAX-B jar 都是相同版本之后,问题仍然存在。

      修复:然后我将ha-api.jar 添加到 WEB-INF\lib 目录,这解决了问题。

      这里的线索是异常类路径中的“ha”包,如上所示。希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-07
        • 2021-10-27
        • 1970-01-01
        • 1970-01-01
        • 2015-11-25
        • 1970-01-01
        相关资源
        最近更新 更多