標籤:
JAVA 1.6 之後,內建的JAX-WS API,這使得我們可以很方便的開發一個基於Java的WebService服務。
基於JAVA的WebService 服務
1、建立服務端WebService服務介面
package com.st.services;import javax.jws.WebService;import javax.jws.soap.SOAPBinding;import javax.jws.soap.SOAPBinding.Style;import javax.jws.soap.SOAPBinding.Use;@WebService(serviceName="calculator",targetNamespace="com.st.services")@SOAPBinding(style=Style.RPC,use=Use.LITERAL)public class CalculatorService {public int sum(int a,int b){return a+b ;}}
@WebService
此注示用來標明此java類為某個WebService的實作類別或者標明此java介面定義了某個WebService的介面。
@WebService有六個參數可以用來配置這個WebService的定義:
1、endpointInterface:指向一個定義此WebService抽象定義介面的完整類路(如果沒有定義介面,直接寫的實作類別,則該參數不需要)
2、name:WebService名;預設的port名為"實作類別名+Port",binding名為"實作類別名+PortBinding",通過指定name的值來替換 實作類別名。
3、portName:指定port名,可以完成替換預設port名,或由上面的"name"指定的port名。
4、targetNamespace:指定targetNamespace值,預設的值為 "http://包名/",可以通過此變數指定一個自訂的targetNamespace值。(註:如果分別定義和介面和實現,則他們有各自的targetNamespace)
5、serviceName:指定service名
6、wsdlLocation:指向一個預定義的wsdl的檔案,替代自動產生的wsdl檔案。
!如果不想定義的話,可以直接寫一個@WebService ,其他的屬性用預設的。
@WebMethod
- action:指定此方法對應的action
- exclude:true --表示此方法包含在web服務中;false表示排除此方法
- operationName:指定方法對應的operation的名字。
!如果你對你的WebService方法沒有啥特殊要求的話,該參數可以不寫,那將會使你的所有的方法發布出去。
2、發布服務
public static void main(String[] args) { Endpoint.publish("http://localhost:8088/calculator", new CalculatorService()); }
這裡publish方法需要兩個參數:
- address:服務對外暴露的用於調用服務的地址
- implementor:服務的實現對象
啟動這個Server類,就可以訪問服務了。要測試服務有沒有啟動,可以輸入http://localhost:8088/calculator?wsdl,如果一切正常,就可以看到一個wsdl定義內容,表示服務已經成功啟動。
3、用戶端程式的調用
用戶端的代碼建議使用wsimport 去產生(前提:在你的電腦上已經配置了JDK的環境變數)
直接在CMD中運行:
wsimport -keep -p com.st.client http://localhost:8088/calculator?wsdl
-p : 定義產生包的包名(可以不寫)
然後將產生的java類放到項目中進行調用
!使用java發布WebService,預設是發布到了JDK的WEB容器中了,但在具體的項目中,更多的是有獨立WEB容器(eg:Tomcat),所有這裡只是對此做個簡單的介紹。
JAX-WS 學習一:基於java的最簡單的WebService服務