1. 程式人生 > >Java6 WebService客戶端封裝 (可配置IP)

Java6 WebService客戶端封裝 (可配置IP)

在開發WebService客戶端應用的時候,面臨的最大挑戰是事先不知道服務端要部署在哪裡,埠是什麼,因此Hello World的例子並不適合生產環境,還需要進一步的做改進。 改進的總體思想是將靜態的部分替換為動態的,也就是說,將服務的ip和埠,做成動態引數,然後根據服務端的部署靈活改變這些配置引數。 下面針對前面的例子對客戶端做一個改進。 1、寫WebService服務的配置引數檔案 wscfg.properties #Java6WS服務的配置 
Java6WS.wsip=192.168.14.117 
Java6WS.wsport=8888 2、寫配置引數獲取工具 SysParamsToolkit.java package lavasoft.common; 

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(); 
        } 
} 3、修改Java6工具生成的程式碼,改靜態的IP和埠為動態的引數。 這一步是最關鍵的一步,前面的都是準備工作,這一步才是實質性的工作,首先你要找到所生成客戶端程式碼的服務介面實現類,在此是Java6WSService類。 @WebServiceClient(name = "Java6WSService", targetNamespace = "http://server.lavasoft/", wsdlLocation = "http://192.168.14.117:8080/java6ws/Java6WS?wsdl") 
public class 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; 
        } 

......
到此,大功告成了,你的客戶端程式碼具有了可配置功能了。可以不再擔心服務端如何部署了。 執行一把看看: 由於客戶端生成的程式碼超多,不能一一貼出,也沒必要,詳細原始碼請檢視附件。