調用webService的幾種方式

一、概覽

方式1:

HttpClient:可以用來調用webservie服務,也可以抓取網頁數據

版本1:HttpClient3.0.x

版本2:HttpClient4.x.x(目前最新4.5.2)

這2個版本的使用方式不一樣;變動較大

方式2:純java(自帶API)      jws

方式3:cxf框架

方式4:axis2框架


準備工作:

1.瞭解wsimport        java自帶的一個命令(建議使用jdk7,穩定支持)

作用:將wsdl文件生成本地代理(java代碼),方便調用

語法  wsimport [opations] <wsdl_uri>
    - wsdl_uri:wsdl 的統一資源標識符
    - d  :指定要輸出的文件的位置
    - s  :表示要解析java的源碼 ,默認解析出的是class字節碼 
    - p  : 指定輸出的包名
 
1. 獲取服務路徑:比如
  http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?WSDL


2. 獲取wsdl文件.建議使用JDK1.6以上的版本的wsimport命令


進入dos的桌面:
方式1:wsimport http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?WSDL
這種默認只會生成class,且會生成默認的包
方式2:生成源碼,指定包和路徑
wsimport -s ./ -p cn.aa http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?WSDL


3.可以把class文件打成jar包 jar cvf  test.jar  打包目錄

4.放在你的項目中進行調用:

[html]  view plain  copy
  1. public static void main(String[] args) {  
  2.         MobileCodeWS mobileCodeWs=new MobileCodeWS();  
  3.         MobileCodeWSSoap mobileCodeWSSoap=mobileCodeWs.getMobileCodeWSSoap();  
  4.         String tel=mobileCodeWSSoap.getMobileCodeInfo("183735xxxx",null);  
  5.         System.out.println(tel);  
  6.     }  


2.規範瞭解

JAVA 中共有三種WebService 規範,分別是JAX-WS(JAX-RPC)、JAXM&SAAJ、JAX-RS。

1. Jaxws(掌握)

JAX-WS  的全稱爲 Java API for XML-Based Webservices ,早期的基於SOAP 的JAVA 的Web 服務規範JAX-RPC(Java API For XML-RemoteProcedure Call)目前已經被JAX-WS 規範取代。從java5開始支持JAX-WS2.0版本,Jdk1.6.0_13以後的版本支持2.1版本,jdk1.7支持2.2版本。

 Jaxws開發的webservice傳輸soap協議。

2JAXM&SAAJ(瞭解)

JAXM(JAVA API For XML Message)主要定義了包含了發送和接收消息所需的API,SAAJ(SOAP With Attachment APIFor Java,JSR 67)是與JAXM 搭配使用的API,爲構建SOAP 包和解析SOAP 包提供了重要的支持,支持附件傳輸等,JAXM&SAAJ 與JAX-WS 都是基於SOAP 的Web 服務,相比之下JAXM&SAAJ 暴漏了SOAP更多的底層細節編碼比較麻煩,而JAX-WS 更加抽象,隱藏了更多的細節,更加面向對象,實現起來你基本上不需要關心SOAP 的任何細節

3.  JAX-RS(掌握)

JAX-RS 是JAVA 針對REST(Representation State Transfer)風格制定的一套Web 服務規範,由於推出的較晚,該規範(JSR 311,目前JAX-RS 的版本爲1.0)並未隨JDK1.6 一起發行。

Rest定義可以自行搜索

 jax-RS可以發佈 rest風格webservice,因爲rest的webservice不採用soap傳輸,直接採用http傳輸,可以返回xml或json,比較輕量。

以後可能會流行Rest風格的



二、簡單例子

1.httpClient3.x.x   

此方式不需要wsimport命令

[html]  view plain  copy
  1. // 通過Http-Client 框架來模擬實現 Http請求--get  
  2.     public static String getMobileCodeInfo1(String mobileCode, String userID)  
  3.             throws HttpException, IOException {  
  4.         HttpClient client = new HttpClient();  
  5.         GetMethod getMethod=new GetMethod("http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo?mobileCode="  
  6.                 + mobileCode + "&userID=" + userID);  
  7.           
  8.         //執行,得到消息碼  
  9.         int code = client.executeMethod(getMethod);  
  10.         System.out.println("消息碼:"+code);  
  11.         String result="";  
  12.         if (code==HttpURLConnection.HTTP_OK) {  
  13.             //得到執行結果  
  14.              result = getMethod.getResponseBodyAsString();  
  15.             System.out.println(result);  
  16.         }  
  17.           
  18.        return result;  
  19.     }  
  20.   
  21.   
  22.     // 通過Http-Client 框架來模擬實現 Http請求--post  
  23.     // 需要導入3個jar包,本demo的jar包版本是3.1.0  
  24.     // 目前最新的是4.5.2,使用方式也發生了變化  
  25.     public static String getMobileCodeInfo2(String mobileCode, String userID)  
  26.             throws HttpException, IOException {  
  27.   
  28.         // 輸入服務網址  
  29.         HttpClient client = new HttpClient();  
  30.         // GetMethod  
  31.         PostMethod post = new PostMethod(  
  32.                 "http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo");  
  33.         // 設置參數  
  34.         post.setParameter("mobileCode", mobileCode);  
  35.         post.setParameter("userID", userID);  
  36.         // client.setTimeout(newTimeoutInMilliseconds);  
  37.   
  38.         // 執行,返回一個結果碼  
  39.         int code = client.executeMethod(post);  
  40.            
  41.         System.out.println("結果碼:" + code);  
  42.         // 獲取xml結果  
  43.         String result = post.getResponseBodyAsString();  
  44.         System.out.println("結果:" + result);  
  45.         //釋放連接  
  46.         post.releaseConnection();  
  47.         return result;  
  48.     }  
  49.   
  50.     // Post請求 :通過Http-Client 框架來模擬實現 Http請求  
  51.     //從xml中獲取請求參數  
  52.     //SOAP1.1方式  
  53.     //問題:soap怎麼定義,這裏已經返回接結果,但是沒有手機號信息,也就返回的結果匹配,不知道爲什麼  
  54.     //估計是配置文件有問題  
  55.   
  56.       
  57.     //soap1.1  
  58.     @Test  
  59.     public void soap() throws Exception{  
  60.   
  61.         HttpClient client=new HttpClient();  
  62.         PostMethod postMethod=new PostMethod("http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx");  
  63.         //3.設置請求參數  
  64.           postMethod.setRequestBody(new FileInputStream("D:/soap.xml")); //文件名自定義  
  65.           //修改請求的頭部  
  66.           postMethod.setRequestHeader("Content-Type", "text/xml; charset=utf-8");  
  67.         //4.執行請求 ,結果碼  
  68.         int code=client.executeMethod(postMethod);  
  69.         System.out.println("結果碼:"+code);  
  70.         //5. 獲取結果  
  71.         String result=postMethod.getResponseBodyAsString();  
  72.         System.out.println("Post請求的結果:"+result);  
  73.     }  
  74.   
  75.     public static void main(String[] args) throws IOException {  
  76.         // getMobileInfo("13476699xxx", "");  
  77.         getMobileCodeInfo1("13476699xxx", "");//  
  78. //      getMobileCodeInfo2("13476699xxx", "");//   
  79.         //soap,利用xml傳輸參數  
  80.     }  
其中:請求參數封裝在soap.xml中

請求規範服務方會提供給你的

soap.xml請求內容如下:

[html]  view plain  copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">  
  3.   <soap:Body>  
  4.     <getMobileCodeInfo xmlns="http://WebXml.com.cn/">  
  5.       <mobileCode>1347669xxxx</mobileCode>  
  6.       <userID></userID>  
  7.     </getMobileCodeInfo>  
  8.   </soap:Body>  
  9. </soap:Envelope>  
httpClient4.x.x不做演示,感興趣的可以去查查,資料很多


2.java自帶API實現

     2.1 類發佈

          2.1.1 使用默認設置

[html]  view plain  copy
  1. @WebService  
  2. //默認服務名會加上Service  
  3. public class PhoneInfoWS {  
  4.       //默認方法名getPhoneInfo  
  5.      //默認參數名arg0  
  6.     //默認返回值名字:return  
  7.     //targetNamespace默認情況下爲倒置的包名  
  8.       public Phone getPhoneInfo(String OSName) {  
  9.           Phone p=new Phone();  
  10.         if ("Android".equalsIgnoreCase(OSName)) {  
  11.             p.setOS(OSName);  
  12.             p.setOwn("Google");  
  13.             p.setScale(80);  
  14.         }else if("IOS".equalsIgnoreCase(OSName)){  
  15.             p.setOS(OSName);  
  16.             p.setOwn("Apple");  
  17.             p.setScale(14);  
  18.         }else if("windows Phone".equalsIgnoreCase(OSName)){  
  19.             p.setOS(OSName);  
  20.             p.setOwn("Microsoft");  
  21.             p.setScale(4);  
  22.         }else{  
  23.             p.setOS("others");  
  24.             p.setOwn("others");  
  25.             p.setScale(2);  
  26.         }  
  27.         return p;  
  28.     }  
  29.         
  30.         
  31.       //靜態,非public方法不會被自動發佈  
  32.       public static String say(String city){  
  33.           return "hello"+city;  
  34.       }  
  35.         
  36.       //訪問時自動生成一個描述文件xml+xsd約束文件  
  37.       public static void main(String[] args) {  
  38.           //implementor要發佈的對象,一般是接口的實現類  
  39.          String address1="http://127.0.0.1/PhoneInfoWS1?WSDL";  
  40.         // String address2="http://127.0.0.1/PhoneInfoWS2?WSDL";  
  41.          Endpoint point = Endpoint.publish(address1, new PhoneInfoWS());  
  42.          Endpoint.publish(address1, new PhoneInfoWS());  
  43.     //   Endpoint.publish(address2, new PhoneInfoWS());  
  44.            
  45.          //關閉發佈  
  46. //       point.stop();  
  47.           
  48.            
  49.     }  
  50. }  


   2.1.2自定義設置

  

[html]  view plain  copy
  1. @WebService(serviceName="PhoneInfoService",targetNamespace="http://PhoneService.web.com/")  
  2. //默認服務名會加上Service  
  3. public class PhoneInfoWS1 {  
  4.       @WebMethod(operationName="getPhoneInfo")  
  5.       public @WebResult(name="phone") Phone getPhoneInfo(@WebParam(name="OSName") String OSName) {  
  6.           Phone p=new Phone();  
  7.         if ("Android".equalsIgnoreCase(OSName)) {  
  8.             p.setOS(OSName);  
  9.             p.setOwn("Google");  
  10.             p.setScale(80);  
  11.         }else if("IOS".equalsIgnoreCase(OSName)){  
  12.             p.setOS(OSName);  
  13.             p.setOwn("Apple");  
  14.             p.setScale(14);  
  15.         }else if("windows Phone".equalsIgnoreCase(OSName)){  
  16.             p.setOS(OSName);  
  17.             p.setOwn("Microsoft");  
  18.             p.setScale(4);  
  19.         }else{  
  20.             p.setOS("others");  
  21.             p.setOwn("others");  
  22.             p.setScale(2);  
  23.         }  
  24.         return p;  
  25.     }  
  26.         
  27.         
  28.       //靜態,非public方法不會被自動發佈  
  29.       public static String say(String city){  
  30.           return "hello"+city;  
  31.       }  
  32.         
  33.       //屏蔽要發佈的方法  
  34.       @WebMethod(exclude=true)  
  35.       public  String say1(String city){  
  36.           return "hello"+city;  
  37.       }  
  38.       public  String say2(String city){  
  39.           return "hello"+city;  
  40.       }  
  41.         
  42.         
  43.       //訪問時自動生成一個描述文件xml+xsd約束文件  
  44.       public static void main(String[] args) {  
  45.           //implementor要發佈的對象,一般是接口的實現類  
  46.          String address1="http://127.0.0.1/PhoneInfoWS1?WSDL";  
  47. //       String address2="http://127.0.0.1/PhoneInfoWS2?WSDL";  
  48.          Endpoint point = Endpoint.publish(address1, new PhoneInfoWS1());  
  49.          point.toString();  
  50.          Endpoint.publish(address1, new PhoneInfoWS1());  
  51. //       Endpoint.publish(address2, new PhoneInfoWS1());  
  52.            
  53.          //關閉發佈  
  54. //       point.stop();  
  55.           
  56.            
  57.     }  
  58. }  



注意:

1.  在類上添加@WebService註解,代表發佈一個WebService服務
2. 通過EndPoint(端點服務)發佈一個webService。Endpoint也是jdk提供的一個專門用於發佈服務的類,它的publish方法接收兩個參數,
                 一個是本地的服務地址,二是提供服務的類。它位於javax.xml.ws.*包中。
3. Endpoint.publish(String address, Object implementor) 靜態方法在給定地址處針對指定的實現者對象創建併發布端點
4. 默認public修飾的方法自動發佈,靜態方法不會公佈
5. 如果希望某個方法不對外公開,可以在方法上添加@WebMethod(exclude=true),阻止對外公開。
6. 如果一個類上,被添加了@WebService註解,則必須此類至少有一個可以公開的方法,否則將會啓動失敗。

7.異常處理:
報錯:
 com.sun.xml.internal.ws.model.RuntimeModelerException: runtime modeler error: Wrapper class com.web.PhoneService.jaxws.GetPhoneInfo is not found. 
 Have you run APT to generate them?
解決辦法:jdk7就可以了


8.測試方法:

    a.利用上面說的wsimport生成本地代理,然後調用裏面的代碼進行測試就可以了,這裏就省略了

    b.更方便的測試是使用Eclipse的Web Services Explorer 或者Myeclipse的SOAP Web Services Explorer進行測試

       把鏈接:比如 http://127.0.0.1/PhoneInfoWS1?WSDL 放入到瀏覽器的WSDL地址欄就可以了


     2.2接口發佈

[html]  view plain  copy
  1. @WebService  
  2. public interface JobService {  
  3.    public String getJobInfo();  
  4. }  
  5.   
  6. /*  
  7.  * 默認只會發佈接口的方法,實現類自定義的方法不會被髮布了  
  8.  * 接口和實現類都需要加註解修飾  
  9.  *   
  10.  * 聯想Spring的注入只需在實現類加入註解即可  
  11.  */  
  12. @WebService(serviceName="JobServiceImplService",  
  13. endpointInterface="com.web.InterfaceService.JobService")  
  14. public class JobServiceImpl implements JobService{  
  15.   
  16.     @Override  
  17.     public String getJobInfo() {  
  18.         // TODO Auto-generated method stub  
  19.         return "java開發|前端開發|數據庫開發";  
  20.     }  
  21.       
  22. //  實現類自定義的方法不會被髮布  
  23.     public String say(String name){  
  24.         return "hello "+name;  
  25.     }  
  26.       
  27.       
  28.     public static void main(String[] args) {  
  29.         String address="http://127.0.0.1/JobServiceImpl?WSDL";  
  30.         Endpoint.publish(address, new JobServiceImpl());  
  31.         System.out.println(address);  
  32.     }  
  33.   
  34. }  


3.CXF框架

    Apache CXF 是一個開源的 Services 框架,是XFire和Celtix項目的結合產品,CXF 幫助您來構建和開發 Services 這些 Services 可以支持多種協議,比如:SOAP、POST/HTTP、RESTful HTTP CXF 大大簡化了 Service可以天然地和 Spring 進行無縫集成。


3.1最簡單的接口發佈

這裏先不與Spring集成,需要的jar包

asm-3.3.jar
commons-logging-1.1.1.jar
cxf-2.4.2.jar
jetty-continuation-7.4.5.v20110725.jar
jetty-http-7.4.5.v20110725.jar
jetty-io-7.4.5.v20110725.jar
jetty-security-7.4.5.v20110725.jar
jetty-server-7.4.5.v20110725.jar
jetty-util-7.4.5.v20110725.jar
neethi-3.0.1.jar
wsdl4j-1.6.2.jar
xmlschema-core-2.0.jar

這裏用的是2.4.2的,老版本,不要介意,最新版本3.1.6,可以自行下載

[html]  view plain  copy
  1. @WebService  
  2. //聲明soap1.2  
  3. //@BindingType(value=SOAPBinding.SOAP12HTTP_BINDING)  
  4.   
  5. public interface LanguageService {  
  6.   
  7.     public  String getLanguage(int num);  
  8.   
  9. }  
  10.   
  11. //開發語言排行榜  
  12. @WebService  
  13. public class LanguageServiceImpl implements LanguageService {  
  14.     
  15.     @Override  
  16.     public String getLanguage(int num) {  
  17.         String language="";  
  18.         switch (num) {  
  19.         case 1:  
  20.             language="java語言";  
  21.             break;  
  22.         case 2:  
  23.             language="C語言";  
  24.             break;  
  25.         case 3:  
  26.             language="Objective-C語言";  
  27.             break;  
  28.         case 4:  
  29.             language="C#語言";  
  30.             break;  
  31.         default:  
  32.             language="沒有找到你要排名的語言";  
  33.             break;  
  34.         }  
  35.         return language;  
  36.     }  
  37.       
  38.     /*  
  39.      * 方式1:ServerFactoryBean  
  40.      * 不支持註解,就算你添加了註解也不起作用  
  41.      * 所以你不能修改服務名,方法名,參數名,工作空間等  
  42.      * 另外不支持攔截器  
  43.      * 方式2:JaxWsServerFactoryBean爲ServerFactoryBean的子類(功能擴展)  
  44.      * 特點:  
  45.      * 1、支持註解,如果你沒有使用@webService,運行後,是不會發布方法的。。,所以註解必須加  
  46.      * 如果有接口實現,只需要在接口加上註解即可,命名註解也要在接口裏面做  
  47.      * 這跟之前的純java開發webservice有些不一樣,純java開發接口和實現類要改名必須都加上註解才行  
  48.      * 2、支持攔截器  
  49.      * 3、生成的wsdl更加規範  
  50.      * 兩者的wsdl區別:  
  51.      *     a.方式1 默認不加servcie  方式2:默認加Service,比如<wsdl:definitions name="LanguageServiceService"   
  52.      *     b.方式1 元素前綴 xsd    方式2 元素前綴xs  
  53.      *     c.方式1   
  54.              <wsdl:portType name="LanguageServicePortType">  
  55.              方式2  
  56.              <wsdl:portType name="LanguageService">沒有加PortType  
  57.                
  58.         webService訪問流程:  
  59.         1.首先進行握手,檢查本地代理與服務端的wsdl是否一致,採用的是get請求驗證  
  60.         2.採用post請求,封裝請求參數到xml中,採用soap通信,將這個請求xml傳輸到服務端  
  61.         3.封裝結果爲xml,採用soap通信返回xml,再到客戶端解析得到方法的返回值  
  62.      */  
  63.       
  64.       
  65.     //方式1:不通過註解發佈  
  66.     //這種方式沒有添加webService註解,也就是說沒有註解也可以發佈webService服務,  
  67. //    但是這種方式不是很規範,比如我們不可以通過註解的方式來修改WSDL的標籤信息  
  68.     private static void publishServie1(){  
  69.         LanguageService languageService=new LanguageServiceImpl();  
  70.         ServerFactoryBean bean=new ServerFactoryBean();  
  71.         //Endpoint :地址  , 實現對象  
  72. //      bean.setAddress("http://192.168.8.178:9999/ws/cxf/languangeService");  
  73.         bean.setAddress("http://127.0.0.1:9999/ws/cxf/languangeService?WSDL");  
  74.         //註冊服務器地址和端口  
  75.         bean.setServiceClass(LanguageService.class);//對外提供webservcie的業務類或者接口  
  76.         //註冊哪個實現類提供服務  
  77.         bean.setServiceBean(languageService);//服務的實現bean  
  78.         Server server = bean.create();//創建,發佈webservice  
  79.         //10秒有效  
  80. //      Thread.sleep(1*10*1000);  
  81. //      server.stop();  
  82. //      System.exit(0);  
  83.     }  
  84.       
  85.       
  86.     //JaxWsServerFactoryBean是ServerFactoryBean的子類  
  87.     //可以提供攔截器  
  88.     private static void publishServie2(){  
  89.         JaxWsServerFactoryBean bean=new JaxWsServerFactoryBean();  
  90.         //地址WSDL加不加都可以,訪問時加上就可以了,不加端口也可以發佈  
  91.         bean.setAddress("http://127.0.0.1:8888/ws/cxf/languangeService?WSDL");  
  92. //      bean.setAddress("http://127.0.0.1/ws/cxf/languangeService?WSDL");  
  93.         //設置服務接口  
  94.         bean.setServiceClass(LanguageService.class);  
  95.         //設置服務的類  
  96.         bean.setServiceBean(new LanguageServiceImpl());  
  97.           
  98.         //輸入信息攔截器  
  99.         bean.getInInterceptors().add(new LoggingInInterceptor());  
  100.         //輸出信息攔截器  
  101.         bean.getOutInterceptors().add(new LoggingOutInterceptor());  
  102.           
  103.         Server server = bean.create();  
  104.     }  
  105.       
  106.     public static void main(String[] args) throws Exception{  
  107. //      publishServie1();  
  108.         publishServie2();  
  109.     }  
  110. }  

3.2 結合Spring發佈服務

      這裏重點是如何配置發佈服務,業務邏輯僅僅是演示(輔助),不必參考

     要發佈的服務:保存和根據姓名查詢員工

    saveEmployee          findEmployeeByName

    步驟:

       3.2.1.導包cxf2.7.18裏面的所有jar包 ,其中jetty包不需要,因爲應用是部署在tomcat裏面

       3.2. 2.建實體類,DB類(模擬)

    

[html]  view plain  copy
  1. public class Employee {  
  2.     private String name;  
  3.     private Integer age;  
  4.       
  5.     @DateTimeFormat(pattern="yyyy-MM-dd")  
  6.     private Date birthday;  
  7.   
  8.     public Employee() {  
  9.         super();  
  10.     }  
  11.   
  12.     public Employee(String name, Integer age, Date birthday) {  
  13.         super();  
  14.         this.name = name;  
  15.         this.age = age;  
  16.         this.birthday = birthday;  
  17.     }  
  18.   
  19.     public String getName() {  
  20.         return name;  
  21.     }  
  22.   
  23.     public void setName(String name) {  
  24.         this.name = name;  
  25.     }  
  26.   
  27.     public Integer getAge() {  
  28.         return age;  
  29.     }  
  30.   
  31.     public void setAge(Integer age) {  
  32.         this.age = age;  
  33.     }  
  34.   
  35.     public Date getBirthday() {  
  36.         return birthday;  
  37.     }  
  38.   
  39.     public void setBirthday(Date birthday) {  
  40.         this.birthday = birthday;  
  41.     }  
  42.   
  43.     @Override  
  44.     public String toString() {  
  45.         return "Employee [name=" + name + "age=" + age + "birthday="  
  46.                 + birthday + "]";  
  47.     }  
  48.   
  49. }  
[html]  view plain  copy
  1. //運行時如果報錯Unsupported major.minor version 51.0  
  2. //這說明jdk版本不對,即tomcat的jdk版本跟項目版本不一致  
  3. @Repository  
  4. public class EmployeeDB {  
  5.     public EmployeeDB(){}  
  6.    private static List<Employee> list=new ArrayList<Employee>();  
  7.       
  8.     static{  
  9.         list.add(new  Employee("小米", 12, new Date()));  
  10.     }  
  11.       
  12.     public void save(Employee employee){  
  13.         list.add(employee);  
  14.     }  
  15.       
  16.     public Employee findByName(String name){  
  17.           
  18.         if (list.size()>0) {  
  19.             for(Employee e:list){  
  20.                 if (e.getName().equals(name)) {  
  21.                     return e;  
  22.                 }  
  23.             }  
  24.         }  
  25.         return null;  
  26.     }  
  27.       
  28.     public List<Employee> findAll(){  
  29.         return list;  
  30.     }  
  31.       
  32.       
  33.     public void deleteByName(String name) throws Exception{  
  34.         if (name.length()==0||name==null) {  
  35.           throw new Exception("刪除用戶異常");  
  36.         }  
  37.           
  38.         for (int i = 0; i < list.size(); i++) {  
  39.             if (name.equals(list.get(i).getName())) {  
  40.                 list.remove(list.get(i));  
  41.                 break;  
  42.             }  
  43.         }  
  44.     }  
  45. }   

    3.2.3.建立服務類

    public void deleteByName(String name) throws Exception{  

  •         if (name.length()==0||name==null) {  
  •           throw new Exception("刪除用戶異常");  
  •         }  
  •           
  •         for (int i = 0; i < list.size(); i++) {  
  •             if (name.equals(list.get(i).getName())) {  
  •                 list.remove(list.get(i));  
  •                 break;  
  •             }  
  •         }  
  •     }  
  • }   

  •     3.2.3.建立服務類

        

    [html]  view plain  copy

        

    [html]  view plain  copy
    1. @WebService(serviceName="EmployeeService")  
    2. public interface EmployeeService {  
    3.       
    4.    public void saveEmployee(@WebParam(name="employee")Employee employee );  
    5.      
    6.    public @WebResult(name="Employee")Employee  findEmployeeByName(@WebParam(name="name")String name);  
    7. }  
    8.   
    9.   
    10. public&nbspstyle="margin:0px; padding:0px; border:none; background-color:inherit">="employee")Employee employee );  
    相關文章
    相關標籤/搜索