2011-09-28 50 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」包,如上所示。希望這可以幫助!