简体   繁体   English

JAX-WS和版本冲突

[英]JAX-WS and version conflicts

As test project I've create a very simple WebService using wsdl and jax-ws. 作为测试项目,我使用wsdl和jax-ws创建了一个非常简单的WebService。 The client runs very well if it is deployed as web application in GlassFish but if I start the same (WebService-)Code in Eclipse directly, I get the following error: 如果客户端在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

After some research I found out that it must have something to do with different versions of some library files. 经过一些研究,我发现它必须与某些库文件的不同版本有关。 So now my question is, how can I "fix" my eclipse java execution to run my webservice client correctly? 所以现在我的问题是,如何“修复”我的eclipse java执行来正确运行我的webservice客户端? I've found some tips to copy some jar to an endorsed-directory, but which jars into which directory :-) 我找到了一些提示,将一些jar复制到一个endorsed目录,但是哪个jar到哪个目录:-)

I'm using Max OS 10.6.8, Eclipse Project uses JVM 1.6. 我正在使用Max OS 10.6.8,Eclipse Project使用JVM 1.6。 My Mac Java Version is 我的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)

UPDATE : My first try (thanks to the link from remipod) I performed the following steps: 更新 :我的第一次尝试(感谢remipod的链接)我执行了以下步骤:

  1. Get the directory of endorsed lirbaries with System.out.println(System.getProperty("java.endorsed.dirs")); 使用System.out.println(System.getProperty("java.endorsed.dirs"));获取已认可的lirbaries目录System.out.println(System.getProperty("java.endorsed.dirs"));
  2. Next, I copied the two files JAXWS2.1.7-20090419.jar and JAXB2_20080513.jar (both Version 2.1.7) into this directory 接下来,我将两个文件JAXWS2.1.7-20090419.jar和JAXB2_20080513.jar(两个版本2.1.7)复制到此目录中
  3. Unfortunately I get still the same error 不幸的是我仍然遇到同样的错误

I have similar problem with yours when deploying web service (JAX-WS) in tomcat 7. The missing class definition could be found in ha-api.jar. 在tomcat 7中部署Web服务(JAX-WS)时,我遇到了类似的问题。可以在ha-api.jar中找到缺少的类定义。

org/glassfish/ha/store/api/BackingStoreException

You should add the ha-api.jar (From JAX-WS distribution) into server lib. 您应该将ha-api.jar(从JAX-WS发行版)添加到服务器lib中。 For my case, the eclipse run tomcat 7, so the location is (Tomcat 7.0\\lib). 对于我的情况,eclipse运行tomcat 7,所以位置是(Tomcat 7.0 \\ lib)。

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

I experienced the exact same exception 我经历了完全相同的例外

org.glassfish.ha.store.api.BackingStoreException org.glassfish.ha.store.api.BackingStoreException

And after ensuring my JAX-WS and JAX-B jars were all the same version the issue was still occurring. 在确保我的JAX-WS和JAX-B罐子都是相同版本之后,问题仍然存在。

THE FIX : I then added the ha-api.jar to the WEB-INF\\lib directory and this solved the issue. 修复 :然后我将ha-api.jar添加到WEB-INF \\ lib目录中,这解决了这个问题。

The clue here was the "ha" package in the exceptions class path as seen above. 这里的线索是异常类路径中的“ha”包,如上所示。 Hope this helps! 希望这可以帮助!

Have a look at this link JAX WS with WS 2.1.1 . 看看这个链接JAX WS与WS 2.1.1 You will need to give precedence to your version of jaxws to the provided jaxws from the jre 1.6. 您需要优先使用jre 1.6提供的jaxws版本的jaxws。

Edit: Glassfish already includes some libraries, as well as java 6. I had to track down version conflicts with jaxws in glassfish 3.1 / 3.1.1 and java 6 / 7. You might check the exact java runtime eclipse uses to start the application and look for duplicate jars on the effective classpath. 编辑: Glassfish已经包含了一些库,以及java 6.我必须在glassfish 3.1 / 3.1.1和java 6/7中跟踪与jaxws的版本冲突。您可以检查eclipse用于启动应用程序的确切java运行时和在有效的类路径上查找重复的jar。

The endorsed mechanism just provides an easy and error prone way to override the included jaxws distribution. 认可机制只是提供了一种简单且容易出错的方式来覆盖所包含的jaxws发行版。 Error prone, because your colleague will suffer from the same problem. 容易出错,因为你的同事会遇到同样的问题。

I havn't seen the exception org.glassfish.ha.store.api.BackingStoreException in the context of jaxws. 我没有在jaxws的上下文中看到异常org.glassfish.ha.store.api.BackingStoreException。 Your version conflict could be created by another library than jaxws... 您的版本冲突可能由另一个库创建,而不是jaxws ...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM