仍是在WebService技術,服務端and客戶端JDK-wsimport工具(一)的基礎上實現。新建一個包:com.aixs2client。目錄結構以下:html
1、服務端:java
一、仍是使用com.webservice包裏的WebServiceImp.java 文件,可是不使用本地發佈,因此須要刪除發佈代碼。web
WebServiceImp.java:apache
package com.webservice; import javax.jws.WebMethod; import javax.jws.WebService; @WebService public class WebServiceImp { @WebMethod public String getInfo(String id){ String info=""; if (id.equals("1")) { info="張三"; }else if (id.equals("2")) { info="李四"; }else if(id.equals("3")){ info="王五"; }else if(id.equals("4")) { info="趙六"; }else { info="用戶不存在"; } return info; } }
二、WEB-INF下新建一個xml文件,sun-jaxws.xml,內容以下:瀏覽器
endpoint 表示使用此配置文件裏的參數發佈
name:發佈的名稱,名字能夠隨意
implementation:發佈的服務的實現類url-pattern:訪問wsdl文檔時的路徑
1 <?xml version="1.0" encoding="UTF-8"?> 2 <endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime" version="2.0"> 3 <endpoint name="WebServiceDemo" implementation="com.webservice.WebServiceImp" url-pattern="/WebServiceDemo"> 4 </endpoint> 5 </endpoints>
三、在WEB-INF下的web.xml中加入servlet配置.內容以下:app
web.xmljsp
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <display-name></display-name> <servlet> <servlet-name>jaxws</servlet-name> <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>jaxws</servlet-name> <url-pattern>/WebServiceDemo</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
load-on-startup:是否應該在web應用程序啓動的時候就加載這個servlet,調用servlet中的init()方法,若是值爲正整數或者0時,表示容器在應用啓動時就加載並初始化這個servlet,值越小,servlet的優先級越高,就越先被加載。
url-pattern:請求的路徑
四、配置完成後,將項目部署到Tomcat中,並在瀏覽器地址欄輸入servlet請求的地址:http://127.0.0.1:8080/WebService/WebServiceDemo。工具
能夠看到以下頁面:測試
點擊WSDL後面的url,看到wsdl文檔:url
此時服務端完成,服務已經隨着Tomcat的啓動和關閉,能夠使用Soap UI進行測試。
2、客戶端
一、在com.aixs2client包下新建ClientService.java
1 package com.aixs2client; 2 import org.apache.axiom.om.OMElement; 3 import org.apache.axis2.AxisFault; 4 import org.apache.axis2.addressing.EndpointReference; 5 import org.apache.axis2.client.Options; 6 import org.apache.axis2.rpc.client.RPCServiceClient; 7 8 import javax.xml.namespace.QName; 9 public class ClientService { 10 public static String getServiceInfo(String Id) throws Exception { 11 String result = null; 12 //名稱空間 13 String nameSpace="http://webservice.com/"; 14 //服務的方法 15 String method="getInfo"; 16 //wsdl文檔地址 17 String Url = "http://127.0.0.1:8080/WebService/WebServiceDemo?wsdl"; 18 QName qname = new QName(nameSpace,method); 19 Object[] param = new Object[] { Id }; 20 try { 21 //建立客戶端實例 22 RPCServiceClient client = new RPCServiceClient(); 23 Options options = new Options(); 24 options.setTo(new EndpointReference(Url)); 25 options.setAction(nameSpace+method);//調用.net等webservice服務是務必加上 26 client.setOptions(options); 27 OMElement element = client.invokeBlocking(qname, param); 28 //獲取服務端返回的結果 29 result = element.getFirstElement().getText(); 30 System.out.println(result); 31 } catch (AxisFault e) { 32 e.printStackTrace(); 33 } 34 return result; 35 } 36 public static void main(String[] args) { 37 try { 38 getServiceInfo("1"); 39 getServiceInfo("3"); 40 getServiceInfo("4"); 41 getServiceInfo("100"); 42 } catch (Exception e) { 43 e.printStackTrace(); 44 } 45 } 46 47 } 48 49
運行客戶端代碼,調用服務端方法,結果以下: