1. 程式人生 > >eclipse3.4開發webservice

eclipse3.4開發webservice

eclipse自動能把一個類部署為web services,並生成客戶機.所以我的做法是:
1,建立一個動態web工程
2,在這個動態web工程建立類和方法,和一般的寫法沒什麼區別
3,用eclipse把類部署為web services,會自動生成wsdl和server-config.wsdd
4,把工程匯出為war包,把war包部署到web server中,這樣web services就建立並部署好了,很簡單.

在ie位址列裡輸入wsdl中的那個url,如果能顯示出wsdl的內容,部署就ok了
檢視部署的所有web services: http://ip:port/動態web工程/servlet/AxisServlet

在第3步中,可以選擇web services執行時和伺服器,執行時一般有三種,一是apache
axis,二是jax-rpc,三是jax-ws,這三種就是常用的web services實現

對於web services的客戶端,開發工具也提供自動生成和部署的功能,但生成的都是stub存根,當web services的介面發生變化,就要重新生成stub客戶端,並重新部署,所以一般不使用stub型別的客戶端.其實只要幾行程式碼,就可呼叫web services:

String endpointURL = "...."; //wsdl中的url
Service service = new Service();
Call call = ( Call ) service.createCall();
call.setTargetEndpointAddress( new java.net.URL( endpointURL ) );
call.setOperationName( new QName( "wsdl中的namespace", "要呼叫的方法名稱" ) );
call.addParameter( "入參名稱", QName例項, ParameterMode.IN );
call.addParameter( ... ); //加其它引數
call.setReturnClass( Class.forNam( "返回的類名稱" ) );
call.setReturnType( new QName( "名字空間", "xml中的型別名稱" ), Class.forName( "返回類的名稱" ) );
Object[] inputs = ... //入參的值在這裡面
call.invoke( inputs )

所以,只要知道wsdl,就能夠呼叫web services

注意:
1,入參和返回引數必須是基本型別或實現Serializable介面
2,如果是自定義的類,除了要實現Serializable介面,客戶端呼叫時(動態,非stub),要做xml型別到java類的對映,如上面的addParameter()方法和setReturnType()方法
3,如要檢視請求和響應soap的內容,apache axis中有一個soapmonitor,將它整合到你的web services應用中即可