




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、一使用Axis和XFire發布Web Service21.1 準備工作21.1.1 新建工程21.1.2 axis依賴文件31.1.3 XFire依賴文件31.2 Axis發布Web Service41.2.1 傳遞簡單數據類型的Web Service41.2.2 帶自定義對象傳遞的Web Service81.3 XFire發布Web Services101.3.1 傳遞簡單數據類型的Web Service10傳遞復雜數據類型的Web Service12附錄: 1Server的結構16二調用Web Services172.1 準備工作172.1.1 新建工程172.1.2 啟動Tomcat上發
2、布的1Server服務172.2 Axis發布的Web Service調用方式182.2.1 Dynamic Invocation Interface (DII)方式182.2.2 Dynamic Proxy方式192.2.3 Stubs方式20調用XFire發布的Web Service22服務以jar包形式發布的時候直接調用232.3.2 使用Axis的Client包232.3.3 使用Xfire的Client包24附錄2:2Client目錄結構31一 使用Axis和XFire發布Web Service準備工作Axis主頁:pAxis下載:XFire主頁:dXFire下載:去以上站點下載ax
3、is最新包 和XFire最新包,包內有axis和XFire依賴的其他jar包。1.1.1 新建工程axis依賴文件1.XFire依賴文件Axis發布Web Service傳遞簡單數據類型的Web Service1. 把Axis依賴的jar包放入lib文件夾下.2. 在web.xml中加入如下:<!- * axis ws start * -><listener><listener-class></listener-class></listener><servlet><servlet-name>AxisServle
4、t</servlet-name><servlet-class></servlet-class></servlet><servlet><servlet-name>AdminServlet</servlet-name><servlet-class></servlet-class><load-on-startup>100</load-on-startup></servlet><servlet><servlet-name>SOAPMon
5、itorService</servlet-name><servlet-class></servlet-class><init-param><param-name>SOAPMonitorPort</param-name><param-value>5001</param-value></init-param><load-on-startup>100</load-on-startup></servlet><servlet-mapping><
6、servlet-name>AxisServlet</servlet-name><url-pattern>/servlet/AxisServlet</url-pattern></servlet-mapping><servlet-mapping><servlet-name>AxisServlet</servlet-name><url-pattern>*.jws</url-pattern></servlet-mapping><servlet-mapping><
7、;servlet-name>AxisServlet</servlet-name><url-pattern>/services/*</url-pattern></servlet-mapping><servlet-mapping><servlet-name>SOAPMonitorService</servlet-name><url-pattern>/SOAPMonitor</url-pattern></servlet-mapping><!- uncomment thi
8、s if you want the admin servlet -><!-<servlet-mapping><servlet-name>AdminServlet</servlet-name><url-pattern>/servlet/AdminServlet</url-pattern></servlet-mapping>-><session-config><!- Default to 5 minute session timeouts -><session-timeout&g
9、t;5</session-timeout></session-config><!- currently the W3C havent settled on a media type for WSDL;/TR/2003/WD-wsdl12-20030303/#ietf-draftfor now we go with the basic 'it's XML' response -><mime-mapping><extension>wsdl</extension><m
10、ime-type>text/xml</mime-type></mime-mapping><mime-mapping><extension>xsd</extension><mime-type>text/xml</mime-type></mime-mapping><!- * axis ws end * ->3. 發布到Tomcat5.0+ 啟動Tomcat服務啟動的時候若出現下面錯誤。這個是因為配置文件沒有,沒有關系。訪問http:/localhost:8080/1Server/ser
11、vlet/AxisServlet 查看Axis是否配置成功。出現該圖表示配置成功。4.package .freshpower.services;publicclass HelloAxis public String sayHello(String name)System.out.println("-axis1 被調用-");return"Hello! "+name;5.內容如下:<deployment xmlns="/axis/wsdd/" xmlns:java="http:/x
12、/axis/wsdd/providers/java"><service name="HelloAxis" provider="java:RPC"><parameter name="className" value=".freshpower.services.HelloAxis"/><parameter name="allowedMethods" value="*"/></service>
13、</deployment>在,內容如下:echo.echo 生成的server-config.wsdd在Tomcat發布的應用下 echo.set Axis_Lib=D:projects1ServerwebappWEB-INFlibset Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%set Axis_Servlet=http:/localhost:8080/1Server/servlet/AxisServletpause6. 在執行完后去%TOMCAT_HOME%webapps1ServerWEB-INF文件夾下找到文件,把該文件復制到1Serv
14、erwebappWEB-INF下。我們打開該文件可以看到下面段落:這就是我們剛才發布的web service的描述段落。7. 刷新http:/localhost:8080/1Server/servlet/AxisServlet查看Web Service列表。點擊(wsdl)可以查看該Web Service對應的wsdl文件。 帶自定義對象傳遞的WebService1. 新建User.java文件package .freshpower.bean;publicclass User public User()public User(String name,String age) =
15、 name;this.age = age;public String name;public String age;public String getName() returnname;publicvoid setName(String name) = name;public String getAge() returnage;publicvoid setAge(String age) this.age = age;2. 新建HelloAxisObj.javapackage .freshpower.services;import java.util.ArrayList;im
16、port java.util.List;import .freshpower.bean.User;publicclass HelloAxisObj public User getUser(User user)System.out.println("-axis2 被調用-");user.setName("ujjboy");user.setAge("22");return user;public List<String> getList()System.out.println("-axis2 被調用-");
17、List<String> list = new ArrayList<String>();list.add("aaaaaaa");list.add("bbbbbbb");list.add("ccccccc");return list;3. Web Service。直接插入下面段落來發布。<service name="HelloAxisObj" provider="java:RPC"><parameter name="allowedMethods&
18、quot; value="*"/><parameter name="className" value=".freshpower.services.HelloAxisObj"/></service><beanMapping qname="scNS:List" xmlns:scNS="urn:BeanService" languageSpecificType="java:java.util.List" /><beanMapping
19、qname="scNS:User" xmlns:scNS="urn:BeanService" languageSpecificType="java:.freshpower.bean.User" />4. 重啟Tomcat服務器。5. 刷新http:/localhost:8080/1Server/servlet/AxisServlet 查看Web Service列表。點擊(wsdl)可以查看該Web Service對應的wsdl文件。XFire發布WebServices1.3.1 傳遞簡單數據類型的Web Service1. 把X
20、Fire依賴的jar包放入lib文件夾下。2. 如下代碼:<!- * xfire start * -><servlet><servlet-name>XFireServlet</servlet-name><servlet-class></servlet-class><load-on-startup>0</load-on-startup></servlet><servlet-mapping><servlet-name>XFireServlet</servlet-
21、name><url-pattern>/servlet/XFireServlet/*</url-pattern></servlet-mapping><servlet-mapping><servlet-name>XFireServlet</servlet-name><url-pattern>/service/*</url-pattern></servlet-mapping><!- * Xfire end * ->3. 編寫程序代碼首先編寫一個功能的接口類。package .
22、freshpower.services;publicinterface HelloXfire public String sayHello(String name);再編寫一個功能的接口實現類。package .freshpower.services;publicclass HelloXfireImpl implements HelloXfirepublic String sayHello(String name) System.out.println("-xfire1 被調用-");return"Hello! "+name;4. 在src下或者直接在w
23、ebappWEB-INF下文件,內容如下:<?xml version="1.0" encoding="UTF-8"?><beans><service xmlns="/config/1.0"><name>HelloXfire</name><namespace></namespace><serviceClass></serviceClass><implementationClas
24、s></implementationClass></service></beans>5. 重啟Tomcat服務 出現如下圖加載信息代表發布正確完成。6. 訪問http:/localhost:8080/1Server/service/ 查看Web Service列表和wsdl文件。點擊wsdl就可以查看它的wsdl描述文件。傳遞復雜數據類型的Web Service1. 了解XFire的綁定機制Aegis首先說明,Aegis為XFire默認的綁定方式,那么何時需要綁定?Aegis支持的類型1).基本類型:int,double,float,long,byte
25、,short,String,decimal2).數組(Array)3).集合類型(Collection)4)l.Calendar, java.sql.Timestamp, java.sql.Date, 5).XML:org.w3c.dom.Docmument, org.jdom.Element, XMLStreamReader, XML文本6).包含以上類型的自定義類型Aegis需要綁定的類型1).集合類型(Collection)2).包含集合類型的自定義類型當使用JDK1.4時,或者是使用了JDK1.5及以上版本但是沒有使用泛型的時候、當遇到需要映射POJO或配置WebService接口方法
26、返回類型(如集合類型)時,需要進行綁定,此時aegis的綁定為建立.aegis.xml的文件。2. 編寫接口類HelloXfireObj.javapackage .freshpower.services;import java.util.List;import .freshpower.bean.User;publicinterface HelloXfireObj public User getUser(User user);public List<String> getList();編寫接口實現類package .freshpower.services;import java.ut
27、il.ArrayList;import java.util.List;import .freshpower.bean.User;publicclass HelloXfireObjImpl implements HelloXfireObjpublic User getUser(User user)System.out.println("-Xfire2 被調用-");user.setName("ujjboy");user.setAge("22");return user;public List<String> getList(
28、)System.out.println("-Xfire2 被調用-");List<String> list = new ArrayList<String>();list.add("aaaaaaa");list.add("bbbbbbb");list.add("ccccccc");return list;3. 綁定數據類型。新建與接口類同名的.aegis.xml文件 如下圖:文件內容如下:<?xml version="1.0" encoding="UTF-8
29、"?><mappings><mapping><method name="getUser"><parameter index="0" componentType=".freshpower.bean.User" /><return-type componentType=".freshpower.bean.User" /></method></mapping></mappings>注意 List里面帶的是簡單數
30、據類型就不用綁定,帶的是復雜類型就用綁定類型。而且List一定要聲明所包含的對象。例如List<User>,List<int>等。4. 修改webappWEB-INFservices.xml 發布Web Service。和上例沒什么區別,在文件中增加節點:<service xmlns="/config/1.0"><name>HelloXfireObj</name><namespace></namespace><serviceClass&g
31、t;</serviceClass><implementationClass></implementationClass></service>5. 重啟Tomcat 6. 訪問http:/localhost:8080/1Server/service/ 查看Web Service列表和wsdl文件。附錄1: 1Server工程的結構二 調用Web Services2.1 準備工作2.1.1 新建工程新建一個2Client的Web Project 把剛才1Server的lib下的jar包復制過來.2.1.2 啟動Tomcat上發布的1Server服務1
32、Server服務上應該有axis和XFire發布的4個Web Service等待調用。http:/localhost:8080/1Server/services/HelloAxis?wsdlhttp:/localhost:8080/1Server/services/HelloAxisObj?wsdlhttp:/localhost:8080/1Server/service/HelloXfire?wsdlhttp:/localhost:8080/1Server/service/HelloXfireObj?wsdl2.2 Axis發布的Web Service調用方式Axis支持三種方法:ü
33、 Dynamic Invocation Interface (DII)方式ü Dynamic Proxy方式 ü Stubs方式 2.2.1 Dynamic Invocation Interface (DII)方式該方式可以不用生成本地客戶端,直接從wsdl文件中得到操作方法,傳遞的參數等。然后按照下面的1到6步寫代碼就可以。step1: 創建一個Service實例,注意是必須的!<br>step2: 創建Call實例,也是必須的!<br>step3: 為Call設置服務的位置 操作的方法名<br>step4: 映射要傳遞自定義類型 設置
34、返回類型等(可選)<br>step5: 為方法增加參數,傳幾個參數寫幾個(可選)<br>step6: 用參數數組調用Web Service<br>package .freshpower.client;import space.QName;import javax.xml.rpc.ParameterMode;import org.apache.axis.client.Call;import org.apache.axis.client.Service;import org.apache.axis.encoding.XMLType;p
35、ublicclass TestAxis1 publicstaticvoid main(String args) throws Exception /*step1:創建一個Service實例,注意是必須的!*/Service service = new Service(); /*step2:創建Call實例,也是必須的!*/Call call = (Call) service.createCall();/*step3:為Call設置服務的位置操作方法名*/call.setTargetEndpointAddress(new .URL("http:/localhost:8080/1Serv
36、er/services/HelloAxis");call.setOperationName("sayHello");/*step4映射要傳遞自定義類型設置返回類型等(可選)如果返回的是自定義類型也要映射*/call.setReturnType(XMLType.XSD_STRING);/*step5:為方法增加參數,傳幾個參數寫幾個*/call.addParameter( new QName("/","name"),XMLType.XSD_STRING,ParameterMode.IN
37、 );/*step6:用參數數組調用Web Service*/String name = "freshpower"String result = (String) call.invoke(new Objectname);System.out.println(result);執行的結果是:2.2.2 Dynamic Proxy方式該方法首先是在本地虛擬一個服務端Web Service的接口。該接口繼承java類。package .freshpower.client;import java.rmi.Remote;import java.rmi.RemoteException;p
38、ublicinterface TestAxis2Iface extends Remote public String sayHello(String name) throws RemoteException;然后我們再寫一個代理服務在本地調用這個接口類。package .freshpower.client;import .MalformedURLException;import .URL;import java.rmi.RemoteException;import space.QName;import javax.xml.rpc.Service;import jav
39、ax.xml.rpc.ServiceException;import javax.xml.rpc.ServiceFactory;publicclass TestAxis2Proxy publicstaticvoid main(String args) throws ServiceException, MalformedURLException, RemoteException String wsdlUrl = "http:/localhost:8080/1Server/services/HelloAxis?wsdl"String nameSpaceUri = "h
40、ttp:/localhost:8080/1Server/services/HelloAxis"String serviceName = "HelloAxisService"/從wsdl文件中得到String portName = "HelloAxis"/從wsdl文件中得到ServiceFactory serviceFactory = (ServiceFactory) ServiceFactory.newInstance();Service service = serviceFactory.createService(new URL(wsdlU
41、rl), new QName(nameSpaceUri,serviceName);TestAxis2Iface proxyClient = (TestAxis2Iface) service.getPort(new QName(nameSpaceUri, portName),TestAxis2Iface.class);System.out.println(proxyClient.sayHello("freshpower");運行結果是:2.2.3 Stubs方式Stubs方式是使用axis自帶的WSDL2JAVA根據發布的WSDL文件生成本地客戶端,然后直接在本地調用。首先學
42、習下WSDL2JAVA工具。我們新建一個wsdl2java.bat 內容如下:echo -echo 設置Output_Path設置為你要生成的路徑echo Package設置為生成文件的包路徑echo 最后是wsdl可以是文件路徑 可以是URLecho -pauseset Axis_Lib=D:projects2ClientwebappWEB-INFlibset Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%set Output_Path=D:projects2Clientsrcset Package=AxisObj%Java_Cmd% org.apache.
43、axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% http:/localhost:8080/1Server/services/HelloAxisObj?wsdl我們以第二個傳遞對象的WebService為例。執行批處理生成客戶端后,我們來看下目錄結構。生成客戶端后,我們就有了用戶自定義的User對象類,和一些web service的相關類(注意:,不用自動生成的)。有了本地客戶端,調用就十分簡單。我們可以利用客戶端使用前面介紹DII方式進行調用,也可以使用stubs方式調用。Stubs的調用方式十分簡單:服務名Service service = n
44、ew 服務名ServiceLocator();服務名Stub client = (服務名Stub) service.get服務名();System.out.println(client.方法(參數.);程序代碼如下:package .freshpower.client;import .freshpower.autoClient.HelloAxisObj.*;publicclass TestAxisObj2 publicstaticvoid main(String args) throws Exception HelloAxisObjService service = new HelloAxis
45、ObjServiceLocator();HelloAxisObjSoapBindingStub client = (HelloAxisObjSoapBindingStub) service.getHelloAxisObj();/測試結果User a = new User("11", "AAAA");System.out.println(client.getUser(a).getName();List list = client.getList();System.out.println(list.toString();執行后 我們發現getUser方法是正
46、確的,而getList方法是錯誤的呢?看了錯誤原來自動生成的客戶端里面所有的getList相關方法都是使用的是.List類,。所以需要調整下自動生成的代碼和客戶端代碼。首先客戶端HelloAxisObj2.java需要調整。其次要把HelloAxisObj_PortType.java和HelloAxisObjSoapBindingStub.java中的“”全部換成“”,保存。重新執行后沒提示錯誤。成功。調用XFire發布的Web ServiceXfire的調用也有很多,但是都大同小異:主要有:1. 服務以jar包形式發布的時候 直接調用2. 使用AXIS的Client 包ü Dyna
47、mic Invocation Interface (DII)ü Stubs方式 (wsdl2java生成客戶端)3. 使用Xfire的Client包ü 通過WSDL文件直接調用程序ü WsGen(Ant)生成客戶端調用程序ü MyEclipse插件生成客戶端調用程序服務以jar包形式發布的時候 直接調用當服務端以jar包形式發布,我們就相當于有了客戶端的接口類和其自定義對象類。(無接口實現類)。為了節省時間,我們就直接在1Server下新建一個Client,相當于擁有服務端的客戶端。代碼如下:package .freshpower.client;impo
48、rt .MalformedURLException;import java.rmi.RemoteException;import org.codehaus.xfire.XFireFactory;import org.codehaus.xfire.client.XFireProxyFactory;import org.codehaus.xfire.service.Service;import org.codehaus.xfire.service.binding.ObjectServiceFactory;import .freshpower.services.HelloXfire;publiccl
49、ass TestXfire4jar publicstaticvoid main(String args) throws RemoteException,MalformedURLException Service srvcModel = new ObjectServiceFactory().create(HelloXfire.class,null,"",null);XFireProxyFactory factory = new XFireProxyFactory(XFireFactory.newInstance().getXFire();String wsURL = &quo
50、t;http:/localhost:8080/1Server/service/HelloXfire"HelloXfire client = (HelloXfire) factory.create(srvcModel, wsURL);System.out.print(client.sayHello("freshpower");運行后得到結果:2.3.2 使用Axis的Client包只需要修改下wsdl2java.bat中的生成包地址和wsdl文件地址。(參見)刷新下工程目錄,我們就能發現剛生成的客戶端文件。有了客戶端文件,我們就可以使用DII或者Stubs方式就行調
51、用。(參見2.2.1 Dynamic Invocation Interface (DII)方式和2.2.3 Stubs方式)2.3.3 使用Xfire的Client包通過WSDL文件直接調用程序該方式類似于axis的DII調用方式。只需要得到wsdl文件后放在src或者WEB-INFclasses下即可。也可以通過wsdl的URL地址調用。package .freshpower.client;import java.io.IOException;import .URL;import org.codehaus.xfire.client.Client;import org.springframew
52、ork.core.io.ClassPathResource;import org.springframework.core.io.Resource;publicclass TestXfire1 publicstaticvoid main(String args) throws IOException, Exception /本地的寫法/String wsdl = "HelloXfire.wsdl" / 對應的WSDL文件/Resource resource = new ClassPathResource(wsdl);/Client client = new Client(r
53、esource.getInputStream(), null); /根據WSDL創建客戶實例/URL的寫法Client client = new Client(new URL("http:/localhost:8080/1Server/service/HelloXfire?wsdl");/ 調用特定的Web Service方法Object results = client.invoke("sayHello", new Object"freshpower");System.out.println(results0);調用結果為.2WsG
54、en(Ant)生成客戶端調用程序WsGen是Xfire提供的一個Ant Task。我們可以使用Ant輕松實現生成Xfire自己的客戶端。在程序下新建Ant文件夾,內有bulid.bat和bulid.xml兩個文件,如圖:build.xml內容如下:<?xml version="1.0" encoding="UTF-8" ?><project name="XFire-WsGen" basedir="./" default="createFile"><!- 設置clas
55、spath -><property name="lib" value="$basedir/webapp/WEB-INF/lib" /><path id="myclasspath"><fileset dir="$lib"><include name="*.jar" /></fileset><pathelement location="$createFile" /></path><!- 指定生成src文件地址 wsdl文件地址(可是是本地) 包路徑-><property name="code_path" value="$basedir/src" /><property name="wsdl_path" value="http:/localhost:8080/1Server/service/HelloXfire?wsdl" /><property name="code_package" value="" /><
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 纖維加工過程中的節能減排考核試卷
- 琥珀蜜蠟拍賣考核試卷
- 礦物學及巖石學考核試卷
- 糕點行業產品質量評價與監督考核試卷
- 臨清市2024-2025學年五年級數學第二學期期末綜合測試模擬試題含答案
- 珠海三中高一下學期期中考試理科生物試題
- 吉林司法警官職業學院《紀錄片創作與拍攝》2023-2024學年第一學期期末試卷
- 山東蒙陰縣2024-2025學年中考化學試題倒計時模擬卷(2)含解析
- 遼寧省普蘭店市第一中學2025年高三下學期模擬測試(三)語文試題含解析
- 眉山職業技術學院《兒童舞蹈創編(實驗)》2023-2024學年第二學期期末試卷
- 國開電大《C語言程序設計》形考任務2答案
- 《猝死的預防和治療》課件
- 物業保潔作業指導書(三甲大型醫院類)
- 安全技術交底(模板)
- 2022新大象版科學五年級下冊必背知識點總結
- 混凝土氯離子含量試驗檢測記錄表(選擇性電極法)
- 納稅實務(第三版)項目一納稅基礎知識
- 藍色卡通風醫療健康匯報PPT模板
- 匯源果汁生產廢水處理工程設計
- 裸子植物課件
- 賓館安全保衛制度
評論
0/150
提交評論