在開發WebService客戶端應用的時候,面臨的最大挑戰是事先不知道服務端要部署在哪裏,端口是什麼,所以Hello World的例子並不適合生產環境,還須要進一步的作改進。
改進的整體思想是將靜態的部分替換爲動態的,也就是說,將服務的ip和端口,作成動態參數,而後根據服務端的部署靈活改變這些配置參數。
下面針對前面的例子對客戶端作一個改進。
一、寫WebService服務的配置參數文件
wscfg.properties
#Java6WS服務的配置
Java6WS.wsip=192.168.14.117
Java6WS.wsport=8888
二、寫配置參數獲取工具
SysParamsToolkit.java
import java.io.IOException;
import java.util.Properties;
/**
* 媒資系統配置文件參數獲取工具
*
* @author leizhimin 2009-11-16 15:21:22
*/
public
final
class SysParamsToolkit {
private
static Properties prop;
private SysParamsToolkit() {
}
static {
reload();
}
public
static
boolean reload() {
boolean flag =
true;
prop =
new Properties();
try {
prop.load(SysParamsToolkit.
class.getResourceAsStream(
"/wscfg.properties"));
flag =
false;
}
catch (IOException e) {
e.printStackTrace();
}
return flag;
}
public
static Properties getSysProperties() {
return prop;
}
/**
* 獲取指定的系統屬性值
*
* @param key 指定的屬性名稱
* @return 指定的系統屬性值
*/
public
static String getProperty(String key) {
return prop.getProperty(key);
}
/**
* 獲取指定的系統屬性值
*
* @param key 指定的屬性名稱
* @param defaultVal 默認值
* @return 指定的系統屬性值
*/
public
static String getProperty(String key, String defaultVal) {
return prop.getProperty(key, defaultVal);
}
public
static
void main(String[] args) {
Properties prop = getSysProperties();
}
}
三、修改Java6工具生成的代碼,改靜態的IP和端口爲動態的參數。
這一步是最關鍵的一步,前面的都是準備工做,這一步纔是實質性的工做,首先你要找到所生成客戶端代碼的服務接口實現類,在此是Java6WSService類。
extends Service {
private
final
static URL JAVA6WSSERVICE_WSDL_LOCATION;
private
final
static Logger logger = Logger.getLogger(lavasoft.wsclient.Java6WSService.
class.getName());
static {
String wsip = SysParamsToolkit.getProperty(
"wsip",
"192.168.14.117");
String wsport = SysParamsToolkit.getProperty(
"wsport",
"8888");
URL url =
null;
try {
URL baseUrl;
baseUrl = lavasoft.wsclient.Java6WSService.
class.getResource(
".");
url =
new URL(baseUrl,
"http://" + wsip + ":" + wsport + "/java6ws/Java6WS?wsdl");
} catch (MalformedURLException e) {
logger.warning("Failed to create URL for the wsdl Location: '"+"http://" + wsip + ":" + wsport + "/java6ws/Java6WS?wsdl"+"', retrying as a local file");
logger.warning(e.getMessage());
}
JAVA6WSSERVICE_WSDL_LOCATION = url;
}
......
到此,大功告成了,你的客戶端代碼具備了可配置功能了。能夠再也不擔憂服務端如何部署了。
運行一把看看: