開發環境:
Eclipse3.2
MyEclipse5.5.1GA
JDK1.5
創建一個WEB Service工程XFire,按照網上的實例開發了一個簡單的HelloWorld程序,發布到TOMCAT一切OK。
客戶端用XFire插件開發(比較方便),需要先下載插件,步驟如下:
打開Eclipse的Help菜單,選擇”Software Updates”,然后再選擇”Find and Install.”
選擇"Search for new features to install",然后點擊Next
選擇"Create New Remote Site", 在name中輸入"XFire",在eclipse update site中輸入
http://dist.codehaus.org/xfire/update/
選擇OK
選擇Finish。
2、新建一個java project。命名為“Client”,其他默認,finish。
3、File->New->Other ,選擇“XFire”文件夾下的“Code generation from WSDL document”,打開代碼生成向導,
WSDL的地址欄填入http://localhost:8080/XFire/services/HelloWorldService?wsdl,Output directory欄中點瀏覽按鈕,選擇我們剛才新建的項目Client,這兩項是必填的。可選項中,package一欄可以選已經存在的包名,如果不填這一項,代碼生成器會在wsdl目標命名空間的基礎上創建一個。
完成后,可以看到項目中多了XFire類庫,還有package下面的生成的一些類。此時要保證IDE的Tomcat服務器是打開的。
此時,在調用服務之前,還有一個重要的步驟,從XFireProject項目的右鍵菜單里調出Properties配置窗口,選中左面一欄中的XFire項,右面會列出所有與XFire運行有關的類庫,按列表中所示的,選中一些類庫,這些類庫在調用本服務時是必須的。
Commons Codec(commons-codec-1.3.jar)
Commons HttpClient(commons-httpclient-3.0.jar)
如果缺少這兩個JAR文件,客戶端在調用WEB 服務時會出錯。
所有的配置都已經完成,最后就是編寫代碼完成調用。
在Tomcat5.0下正常發布,客戶端也能正常調用。然而在發布到WebSphere5.1(base)上面時,就出現了一些列問題,下面是問題簡單描述(只截取了LOG中部分信息)以及解決過程。
[08-5-14 7:02:31:500 GMT] 2a29c7a6 XFireServlet E org.codehaus.xfire.transport.http.XFireServlet TRAS0014I: 下列異常已記錄 org.springframework.beans.factory.BeanDefinitionStoreException: Error registering bean with name 'xfire.typeMappingRegistry' defined in class path resource [org/codehaus/xfire/spring/xfire.xml]: Class that bean class [org.codehaus.xfire.aegis.type.DefaultTypeMappingRegistry] depends on not found; nested exception is java.lang.NoClassDefFoundError: org/codehaus/xfire/aegis/type/DefaultTypeMappingRegistry
java.lang.NoClassDefFoundError: org/codehaus/xfire/aegis/type/DefaultTypeMappingRegistry
[08-5-14 7:02:31:531 GMT] 2a29c7a6 ServletInstan E SRVE0100E: 未識別出由 servlet XFireServlet 拋出的 init() 異常:javax.servlet.ServletException: Error initializing XFireServlet.
at org.codehaus.xfire.transport.http.XFireServlet.init(XFireServlet.java:52)
[08-5-14 7:02:31:531 GMT] 2a29c7a6 WebGroup E SRVE0020E: [Servlet 錯誤]-[XFireServlet]:無法裝入 servlet:org.springframework.beans.factory.BeanDefinitionStoreException: Error registering bean with name 'xfire.typeMappingRegistry' defined in class path resource [org/codehaus/xfire/spring/xfire.xml]: Class that bean class [org.codehaus.xfire.aegis.type.DefaultTypeMappingRegistry] depends on not found; nested exception is java.lang.NoClassDefFoundError: org/codehaus/xfire/aegis/type/DefaultTypeMappingRegistry
java.lang.NoClassDefFoundError: org/codehaus/xfire/aegis/type/DefaultTypeMappingRegistry
[08-5-14 7:02:31:547 GMT] 2a29c7a6 WebGroup E SRVE0026E: [Servlet 錯誤]-[XFireServlet]:org.springframework.beans.factory.BeanDefinitionStoreException: Error registering bean with name 'xfire.typeMappingRegistry' defined in class path resource [org/codehaus/xfire/spring/xfire.xml]: Class that bean class [org.codehaus.xfire.aegis.type.DefaultTypeMappingRegistry] depends on not found; nested exception is java.lang.NoClassDefFoundError: org/codehaus/xfire/aegis/type/DefaultTypeMappingRegistry
java.lang.NoClassDefFoundError: org/codehaus/xfire/aegis/type/DefaultTypeMappingRegistry
上述問題出現后開始在網上大肆查找資料,中間替換過WebSphere中lib里面的幾個包,報的錯誤雖然有所變化,但仍然不能清除。最后覺得是否與JDK版本有關,因為在WebSphere啟動日志里看到WebSphere用的JDK版本是1.4.1,而我所開發的XFire工程是JDK1.5,因此決定把XFire工程用JDK包換成1.4然后用1.4版本重新編譯,然后導出WAR包重新在WebSphere中發布。
先將WebSphere下的lib包恢復到原來狀態(因為中間替換過幾個包)重新發布1.4版本后,錯誤依舊,好吧,開始替換WebSphere下的包:
1、 先將WebSphere下的lib包中的qname.jar包替換為最新版本。
2、 將WebSphere下的lib包中的jdom.jar替換為jdom-1.0.jar.
3、 將WebSphere下的lib包中的wsdl4j.jar包替換為wsdl4j-1.5.1.jar(本來替換為xfire-1.2.6下lib里面的wsdl4j-1.6.1.jar,但替換完之后服務起不來了,其他版本的沒試,在網上看到好像說wsdl4j-1.5.1解決了之前版本的什么BUG.)
4、 在WebSphere下的lib包中添加:stax-api-1.0.1.jar和jaxen-1.1-beta-9.jar兩個包。(還有說需要添加stax-untils-20040917.jar,不過好像不添加也沒問題。這些包在xfire-1.2.6的lib里面都有。)
重新啟動服務器,我們終于可以看到盼望已久的wsdl描述頁面。
然后就測試客戶端,注意XFire插件開發客戶端程序好像必須使用JDK1.5,低版本好像不支持。(記得在工程屬性里將JDK換成1.5后,然后在Java Compiler中選中“Enable project specific settings”,然后在下面的“Compiler compliance level選中5.0”,然后點Apply->ok,重新編譯一下),好,編寫一個測試類,運行就可以看到我們想要得到的HelloWorld了。
總結:注意JDK版本是否沖突。注意WebSphere下的lib中的包是否和項目中的包沖突以及包是否全。
posted on 2008-05-14 16:36
阿偉 閱讀(3467)
評論(1) 編輯 收藏 所屬分類:
Web Service