xfire官網(http://xfire.codehaus.org/Home
)
本文是筆記式的分享,如本文中有不足或錯誤的地方,歡迎指出,如轉貼請說明出處。直接進入正題。
服務端執行個體:
一、File-->New-->Project,選擇“Web Project”,填入項目名稱,J2EE選擇1.4(J2EE5.0和J2EE1.4在實現JavaBean綁定時會有區別,我會在後續的文章中進行說明),Finish
二、右鍵項目-->Properties-->Java Build Path-->Libraries-->Add Library-->MyEclipse Libraries,選擇“XFire 1.2 Core Libraries”,Finish
先貼出完整的目錄結構,方便理解
三、建立一個介面ITransportMessage和這個介面的實作類別TransportMessageImpl
介面ITransportMessage
package com.xfire.example;<br />public interface ITransportMessage<br />{<br />public String transport(String msg);<br />}
實作類別TransportMessageImple
package com.xfire.example.impl;<br />import com.xfire.example.ITransportMessage;<br />public class TransportMessageImpl implements ITransportMessage<br />{<br />public String transport(String msg)<br />{<br />if (msg != null && !"".equals(msg))<br />{<br />return "I've got the message,the message is: " + msg;<br />}<br />else<br />{<br />return "I got noting,please make sure that you sended message to me.";<br />}<br />}<br />}
四、在src目錄下建立META-INF/xfire/service.xml,這步是為了配合MyEclipse部署Tomcat時,能將xfire的設定檔service.xml正確放在/WEB-INF/classes/META-INF/xfire下,你也可手動copy到此目錄下。xfire官方說明:You will need to create a services.xml file which describes the services you are deploying. Put this file on your class path in "META-INF/xfire/services.xml". (Try "WEB-INF/classes/META-INF/xfire/services.xml" if the system cannot find the file.)
service.xml
<?xml version="1.0" encoding="UTF-8"?><br /><beans xmlns="http://xfire.codehaus.org/config/1.0"><br /><service><br /><name>example</name><br /><namespace>example</namespace><br /><serviceClass>com.xfire.example.ITransportMessage</serviceClass><br /><implementationClass>com.xfire.example.impl.TransportMessageImpl</implementationClass><br /></service><br /></beans>
五、修改web.xml
<?xml version="1.0" encoding="UTF-8"?><br /><web-app version="2.4"<br />xmlns="http://java.sun.com/xml/ns/j2ee"<br />xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee<br />http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><br /><servlet><br /><servlet-name>simpleXFire</servlet-name><br /><servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class><br /></servlet><br /><servlet-mapping><br /><servlet-name>simpleXFire</servlet-name><br /><url-pattern>/service/*</url-pattern><br /></servlet-mapping><br /> <welcome-file-list><br /> <welcome-file>index.jsp</welcome-file><br /> </welcome-file-list><br /></web-app>
六、將項目部署到Tomcat下,啟動Tomcat
七、訪問http://localhost:8080/simplexfire/service
,頁面顯示如下:
八、點擊頁面中example後面的wsdl,或者直接存取http://localhost:8080/simplexfire/service/example?wsdl
至此服務端配置完成。
用戶端執行個體:
這裡用含有main函數的類來類比web訪問,如要用web方式實現,將main函數裡的代碼複製到你的代碼中即可。
目前我知道有三種情況來實現用戶端訪問webservice介面:
1、將web端的代碼打成JAR包導到本地
2、儲存網頁wsdl到本地,通過ant的wsgen任務產生本地代碼
3、使用org.codehaus.xfire.client.Client類訪問webservice
如果有高手路過此文章,請問應用一般是採用的什麼方式?賜教。
第一種情況:
一、先將web端/WEB-INF/classes下的class檔案打成JAR包,我這裡取名“simplexfire.jar”
二、建立“Web Project”,匯入“XFire 1.2 Core Libraries”和“XFire 1.2 Http Client Libraries”,另外將“simplexfire.jar”拷貝到此項目下,匯入之。
三、建立ClientI類,寫入main函數
package com.example.xfire.client;<br />import java.net.MalformedURLException;<br />import org.codehaus.xfire.client.XFireProxyFactory;<br />import org.codehaus.xfire.service.Service;<br />import org.codehaus.xfire.service.binding.ObjectServiceFactory;<br />import com.xfire.example.ITransportMessage;<br />public class ClientI<br />{<br />/**<br /> * @param args<br /> */<br />public static void main(String[] args)<br />{<br />// 服務端提供webservice介面的URL<br />String serviceUrl = "http://localhost:8080/simplexfire/service/example";<br />Service service = new ObjectServiceFactory().create(ITransportMessage.class);<br />try<br />{<br />ITransportMessage transportMessage = (ITransportMessage)new XFireProxyFactory().create(service, serviceUrl);<br />String ret = transportMessage.transport("Hi!Are you ready?");<br />System.out.println(ret);<br />}<br />catch (MalformedURLException e)<br />{<br />e.printStackTrace();<br />}<br />}<br />}
四、執行
五、執行結果
第二種情況:
一、建立“Web Project”,J2EE選擇5.0,匯入“XFire 1.2 Core Libraries”和“XFire 1.2 Http Client Libraries”,另外將“activation-1.1.jar”、“commons-logging-1.0.4.jar”、“jaxb-api-2.0.jar”、“jaxb-impl-2.0.1.jar”、“jaxb-xjc-2.0.1.jar”、“jdom-1.0.jar”、“jsr173_api-1.0.jar”、“wsdl4j-1.6.1.jar”、“xfire-all-1.2.6.jar”、“xfire-jsr181-api-1.0-M1.jar”和“XmlSchema-1.1.jar”拷貝到/WEB-INF/lib目錄下(運行wsgen任務,lib目錄下的JAR包缺一不可,這些包可以在“xfire-distribution-*.*.zip”中找到,xfire官網有下
二、儲存wsdl到項目目錄下,我這裡命名為example.xml
三、運行build.xml
build.xml
<?xml version="1.0" encoding="UTF-8"?><br /><project basedir="." default="createcode"><br /><property name="src.home" value="./src"/><br /><property name="lib.home" value="./WebRoot/WEB-INF/lib"/><br /><path id="classpath"><br /><fileset dir="${lib.home}"><br /><include name="*.jar"/><br /></fileset><br /></path><br /><taskdef name="wsgen" classname="org.codehaus.xfire.gen.WsGenTask" classpathref="classpath"/><br /><target name="createcode"><br /><wsgen outputDirectory="${src.home}" wsdl="./example.xml" package="com.xfire.example.web" overwrite="true" /><br /></target><br /></project>
四、重新整理項目,可以發現WebService介面的代碼都已產生,建ClientII類,寫入main函數
package com.xfire.example.client;<br />import com.xfire.example.web.exampleClient;<br />import com.xfire.example.web.examplePortType;<br />public class ClientII<br />{<br />/**<br /> * @param args<br /> */<br />public static void main(String[] args)<br />{<br />exampleClient client = new exampleClient();<br />examplePortType service = client.getexampleHttpPort();<br />String ret = service.transport("HI!Are you ready?");<br />System.out.println(ret);<br />}<br />}
五、執行(同上)
六、執行結果(同上)
第三種情況:
一、建立“Web Project”,匯入“XFire 1.2 Core Libraries”和“XFire 1.2 Http Client Libraries”
二、建ClientIII類,寫入main函數
package com.example.xfire.client;<br />import java.net.MalformedURLException;<br />import java.net.URL;<br />import org.codehaus.xfire.client.Client;<br />public class ClientIII<br />{<br />/**<br /> * @param args<br /> */<br />public static void main(String[] args)<br />{<br />// 服務端提供webservice介面的URL<br />String serviceUrl = "http://localhost:8080/simplexfire/service/example?wsdl";<br />try<br />{<br />Client client = new Client(new URL(serviceUrl));<br />Object[] obj = client.invoke("transport", new Object[]{"Hi!Are you ready?"});<br />System.out.println(obj[0].toString());<br />}<br />catch (MalformedURLException e)<br />{<br />// TODO Auto-generated catch block<br />e.printStackTrace();<br />}<br />catch (Exception e)<br />{<br />// TODO Auto-generated catch block<br />e.printStackTrace();<br />}<br />}<br />}
三、執行(同上)
四、執行結果(同上)
希望對剛剛接觸webservice和xfire的童鞋有所協助,也歡迎指出不足的地方。
上面涉及到的例子壓縮成了包: webservice.rar