實戰(zhàn)JDK6.0自帶webservice

字號:

JAVA 6.0 之后,其中JDK自帶有個輕量級的web service 服務(wù)器。如果你比較細心一定發(fā)現(xiàn)在你安裝java的路徑下,有java webservice 的示例代碼。
    java開發(fā)過web service ,但是當初用了一個apache 下axis 開源項目。如果axis夜進化了,不過java自帶有何必舍近求遠呢。最簡單java webservice 范例過程記錄下來,考試大與大家分享。
    netbeans 6,首先建立一個java 應(yīng)用程序工程,名為WebServices。建立一個服務(wù)端程序。
    package WebServices;
    import javax.jws. * ;
    import javax.xml.ws.Endpoint;
    /**
    * @author hecm
    */
    @WebService(targetNamespace = " http://www.blogjava.net/JAVA-HE " ,
    serviceName = " HelloService " )
    public class WSProvider
    {
    // @WebResult(name = "Greetings") // 自定義該方法返回值在WSDL中相關(guān)的描述
    @WebMethod(action = " sayHi " , operationName = " sayHi " )
    public String sayHi(@WebParam(name = " MyName " ) String name)
    {
    return " Hi, " + name; // @WebParam是自定義參數(shù)name在WSDL中相關(guān)的描述
    }
    @Oneway // 表明該服務(wù)方法是單向的,既沒有返回值,也不應(yīng)該聲明檢查異常
    @WebMethod(action = " printSystemTime " , operationName = " printSystemTime " )
    // 自定義該方法在WSDL中相關(guān)的描述
    public void printTime()
    {
    System.out.println(System.currentTimeMillis());
    }
    public static void main(String[] args)
    {
    Thread wsPublisher = new Thread( new WSPublisher());
    wsPublisher.start();
    }
    private static class WSPublisher implements Runnable
    {
    public void run()
    {
    // 發(fā)布WSProvider到http: // localhost:8888/hechangmin/WSProvider這個地址,之前必須調(diào)用wsgen命令
    // 生成服務(wù)類WSProvider的支持類,命令如下:
    // wsgen -cp . WebServices.WSProvider
    Endpoint.publish("http://localhost:8888/JAVA-HE/WSProvider", new WSProvider());
    }
    }
    }
    當然建立對應(yīng)的包,就不用說了。
    然后編譯文件。
    進入命令提示符下,進入classes目錄,運行:wsgen -cp . WebServices.WSProvider
    可以看到將剛才的class 生成了幾個java文件和class文件。
    現(xiàn)在要做的是發(fā)布ws到http://localhost:8888/chinajash/WSProvider
    而實際上的動作就是:Endpoint.publish("http://localhost:8888/chinajash/WSProvider",new WSProvider());
    當然直接運行WSProvider 。
    然后輸入http://localhost:8888/JAVA-HE/WSProvider?wsdl
    就已經(jīng)查看到生成的wsdl (webservice 描述語言)。
    也就是服務(wù)端就OK了。
    保持運行。編寫一個測試客戶端:
    首先選擇項目,右鍵新建 web服務(wù)客戶端。其中ws url填入剛才生成的wsdl地址:
    http://localhost:8888/JAVA-HE/WSProvider?wsdl
    (實際上:和wsimport http://localhost:8888/JAVA-HE/WSProvider?wsdl 一樣的效果)
    產(chǎn)生一個效果:在classes下 按照 之前指定的名字空間產(chǎn)生的包下(目錄結(jié)構(gòu))生成了7個幫助class。
    然后我們建立一個包 client 建立測試文件:
    /*
    * To change this template, choose Tools | Templates
    * and open the template in the editor.
    */
    package client;
    import net.blogjava.java_he. * ;
    /**
    *
    * @author hecm
    */
    public class Test {
    public static void main(String args[])
    {
    HelloService hs = new HelloService();
    WSProvider ws = hs.getWSProviderPort();
    System.out.println(ws.sayHi( " hechangmin " ));
    ws.printSystemTime();
    }
    }
    運行這個測試類:
    Hi,hechangmin
    輸出了。順利完成!
    考試大提示:一發(fā)布的地址寫成可配置。還有就是wsdl 中會嚴格按照你指定的url來訪問,比如你指定的127.0.0.1 那么你用本機IP的時候也許并不能順利訪問。