2011-09-28 140 views
4

作为测试项目,我使用wsdl和jax-ws创建了一个非常简单的WebService。客户端运行得很好,如果它部署在GlassFish的web应用程序,但如果我在Eclipse中直接启动相同(WebService-)代码,我得到以下错误:JAX-WS和版本冲突

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 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) 

UPDATE:我第一次尝试(感谢来自remipod的链接)我执行以下步骤:

  1. 获得批准lirbaries的目录与System.out.println(System.getProperty("java.endorsed.dirs"));
  2. 接下来,我将两个文件JAXWS2.1.7-20090419.jar和JAXB2_20080513.jar(均为版本2.1.7)复制到此目录中
  3. 不幸的是,我仍然得到相同的错误
+0

从此文件创建您自己的BackupStoreException: http://svn-mirror.glassfish.org/glassfish-svn/trunk/api/ha-api/src/main/java/org/glassfish/ha/store/ api/BackingStoreException.java为我工作。 –

回答

3

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

+0

您可能需要添加ha-api.jar(记住版本),因为这会为我修复它。 – Continuity8

1

看看这个链接JAX WS with WS 2.1.1。你将需要优先考虑你的jaxws版本到jre 1.6提供的jaxws。

编辑: Glassfish的已经包括了一些库,以及Java 6,我不得不追查与GlassFish的3.1/3.1.1 JAXWS和Java版本冲突6/7,你可能要检查的确切Java运行时eclipse用于启动应用程序并在有效的类路径中查找重复的jar。

支持的机制只是提供了一种容易和容易出错的方式来覆盖包含的jaxws分布。容易出错,因为你的同事会遭受同样的问题。

我没有在jaxws的上下文中看到org.glassfish.ha.store.api.BackingStoreException异常。您的版本冲突可能由另一个库创建,而不是jaxws ...

+0

谢谢你的回答!我已经更新了我的问题...... – strauberry

10

在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)。

1

我经历了完全相同的例外

org.glassfish.ha.store.api.BackingStoreException

并且保证以后我的JAX-WS和JAX-B瓶都相同版本的问题仍然存在。

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

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