1. 程式人生 > >jdk釋出webservice服務

jdk釋出webservice服務

1.使用JAX-WS開發webservice


    JAX-WS  的全稱為 Java API for XML-Based Webservices ,從java5開始支援JAX-WS2.0版本,Jdk1.6.0_13以後的版本支援2.1版本,jdk1.7支援2.2版本,本教程我們使用jdk1.7.0_07開發。

那麼如何才可以釋出一個WebService呢?


1:用Jdk1.6.0_13以後的版本釋出一個WebService服務,並通過位址列檢視它的wsdl文件.
2:通過wsimport生成客戶端程式碼,呼叫並檢視執行的結果.(學會如何呼叫是我們的重點).
3:從網際網路上獲取一個WebService網路公開的服務,並使用工具生成客戶端,呼叫並檢視結果。

測試程式碼包括服務端和客戶端的開發
1.3.1 服務端開發:
程式碼:

1.webservice服務介面

package webservice;

import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService
public interface HelloServiceInf {
	
	@WebMethod
	public String getCityInfo(String city);

}

2.webservice服務實現類

package webservice;

import javax.jws.WebService;

@WebService
public class HelloServiceImp implements HelloServiceInf {

	@Override
	public String getCityInfo(String city) {
		// TODO Auto-generated method stub
		return "城市名稱為:"+city;
	}

}

3.釋出webservice

package webservice;

import javax.xml.ws.Endpoint;

public class WebServicePublish {

	   public static void main(String[] args) {
		 String url= "http://192.168.17.104:8020/web";
		 Endpoint.publish(url, new HelloServiceImp());
		 System.out.println("webservice 釋出成功");
	}
}

開啟瀏覽器,輸入剛才釋出的地址:

說明webservice釋出成功,接下來將客戶端怎麼呼叫

wsimport是jdk自帶的,可以根據wsdl文件生成客戶端呼叫程式碼的工具.當然,無論伺服器端的WebService是用什麼語言寫的,都將在客戶端生成Java程式碼.伺服器端用什麼語言編寫的並不重要.
wsimport.exe位於JAVA_HOME\bin目錄下.
例如:在cmd的視窗下執行wsimport可以看到

常用引數為:

-keep:是否生成Java原始檔

-d:指定.class檔案的輸出目錄

-s:指定.java檔案的輸出目錄

-p:定義生成類的包名,不定義的話有預設包名

-verbose:在控制檯顯示輸出資訊

-b:指定jaxws/jaxb繫結檔案或額外的schemas

-extension:使用擴充套件來支援SOAP1.2
示例:
wsimport其他引數說明,我們經常使用的引數為-d,-s,-p
-d<目錄>將會生成.class檔案.
示例:wsimport –d . http://192.168.17.104:8020/web?wsdl
-s<目錄>將會生成.java檔案.
示例:wsimport –s . http://192.168.17.104:8020/web?wsdl
-p<包名>將生成的檔案(.java或是.class修改成指定的包名)
示例:wsimport -s . -p cn http://192.168.17.104:8020/web?wsdl

這裡我們在c盤生成

之後將生成的java程式碼拷貝到客戶端,注意生成的java包名是否有衝突

客戶端程式碼引用如下:

package com.bojoy;

import webservice.HelloServiceImp;
import webservice.HelloServiceImpService;

public class CityClient {
	public static void main(String[] args) {
	 HelloServiceImpService helloServiceImpService = new HelloServiceImpService();
	 HelloServiceImp helloServiceImpPort = helloServiceImpService.getHelloServiceImpPort();
	 String cityInfo = helloServiceImpPort.getCityInfo("上海");
	 System.out.println("客戶端呼叫webservice資訊為:"+cityInfo);
	}

}

結果如下: