JAX-WS - 基礎示例

襲冷發表於2014-06-24
一、簡介

    WebService是一種跨平臺、跨語言的規範。解決遠端、跨平臺、跨語言應用之間的呼叫。

    JAX-WS(Java API for XML-Web Services)規範是一組XML web services的JAVA API。


二、服務端

    1、介面

package com.xilen.ws;

import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;

/**
 * Web服務的介面:SEI(Service EndPoint Interface)
 * 介面需要新增註解@WebService
 */
@WebService
public interface UserInfoService {
	/**
	 * 介面方法,提供的具體服務
	 * 通過註解可以指定訊息元素的名稱為自定義,取代預設的如arg0等
	 */
	@WebResult(name="checkReturn")
	public String check(@WebParam(name="userName")String userName, @WebParam(name="userPass")String userPass);
}
    2、實現

package com.xilen.ws;

import javax.jws.WebService;

/**
 * Web服務的實現:SIB(Service Implementation Bean)
 * 實現需要註解@WebService,並指定實現的介面
 */
@WebService(endpointInterface="com.xilen.ws.UserInfoService", serviceName="UserInfoServiceImplService")
public class UserInfoServiceImpl implements UserInfoService{

	@Override
	public String check(String userName, String userPass) {
		return "Check [ userName:" + userName + "; userPass:" + userPass + " ]";
	}
}
    3、釋出

package com.xilen.ws;

import javax.xml.ws.Endpoint;


public class WsStart {
	public static void main(String[] args) {
		
		String address = "http://127.0.0.1:8888/userinfo";
		/**
		 *通過Endpoint的靜態方法publish()實現釋出
		 *傳入服務的地址和服務的實現物件 
		 */
		Endpoint.publish(address, new UserInfoServiceImpl());
	}
}
    4、檢視

        當瀏覽器訪問釋出地址得到如下圖時成功釋出

            

三、客戶端

    1、準備

        通過wsimport生成WS呼叫的相關檔案,如下:

D:\>wsimport -d D:\JavaWorks\WebServices\JAX-WS_Init_Client\src -keep -verbose http://127.0.0.1:8888/userinfo?wsdl
    2、呼叫

package com.xilen;

import com.xilen.ws.UserInfoService;
import com.xilen.ws.UserInfoServiceImplService;

public class WsClient {

	public static void main(String[] args) {
		
		/**
		 * 在生成的Java類中,繼承javax.xml.ws.Service的類可視為一個工廠
		 * 這個類是的名稱即服務端WS實現中註解的serviceName,同時也是wsdl文件definitions中的name
		 */
		UserInfoServiceImplService uisis = new UserInfoServiceImplService();
		
		//通過這個工廠的例項獲取服務介面的代理
		UserInfoService uis = uisis.getUserInfoServiceImplPort();
		
		//通過這個介面實現遠端呼叫
		System.out.println(uis.check("admin", "12345"));
	}
}
    3、結果

Check [ userName:admin; userPass:12345 ]


四、補充

    wsimport引數:

        -d dirName : 指定生成的檔案的目錄

        -p pkgName : 指定自定義的包名,不指定則預設服務端的包名

        -keep      : 指定是否生成.java的原始檔

        -verbose   : 指定是否顯示生成過程的資訊

        wsdlUrl    : 指定wsdl文件的url
 
五、下載

    http://download.csdn.net/detail/u013379717/7254335

 

 

相關文章