JAX-WS 2.0, an HelloWorld例子

來源:互聯網
上載者:User
在JAX-RPC 1.1中,開發人員需要寫一個介面類Service Endpoint Interface(SEI),在JAX-WS 2.0中,開發人員一上來就可以直接寫自己的實作類別. 通過使用annotations,自動產生SEI和其他一些檔案.這樣有助於開發人員專註於自己想開發的部分,而不必要地分散精力去維護其他的一些附屬檔案.

下面通過一個HelloWorld的例子來看看,JAX-WS 2.0 API的應用過程.程式是用戶端傳給服務端一個名字,經過服務端處理後,返回到用戶端並列印出來.

 

一.   環境配置.

1.      JDK 5.0  下載: http://java.sun.com/j2se/1.5.0/download.jsp

2.      Java EE 5.0 App Server.

   https://glassfish.dev.java.net/public/downloadsindex.html

   本例中測試用了Build 37

下載完畢後請設定一下Path.還有例子中使用的命令對應於Cygwin,如果用Dos或Linux的話,請適當更改相應的形式.

 

例子中執行中的命令列以E:/jaxws20為基準,在其下面創造相對應的檔案夾.

 

二.編寫建立服務端

1.      實作類別.

 

package endpoint;

 

import javax.jws.WebService;

import javax.jws.WebMethod;

 

@WebService()   

public class HelloWorld{

    

    //the implementation class must have a default public constructor

    public HelloWorld() {};

 

    @WebMethod(operationName="sayHello", action="urn:SayHello")

    public String sayHello(String name){

              return "Hello "+ name + "!";

    }

}

請注意實作類別必須標註WebService(),還必須包括一個default public constructor.

 

2.      編譯實作類別.

編譯前,創造相應檔案夾build/classes/service來儲存class檔案.還請注意命令在同一行.

  

javac -classpath $GLASSFISH_HOME/lib/javaee.jar -d ./build/classes/service endpoint/HelloWorld.java

 

3.      產生相應檔案

在E:/jaxws20下,執行下面的命令,注意事先產生/build/generated.

$GLASSFISH_HOME/bin/wsgen.bat-cp ./build/classes/service -keep -d ./build/classes/service -r ./build/generated -wsdl endpoint.HelloWorld

 

通過這個命令,會產生相對應的WSDL檔案.

 

4.      打包

4.1   WEB-INF`結構準備

    WEB-INF/classes/

    WEB-INF/wsdl/

 

4.2  Web.xml

在WEB-INF/下,編寫下面的檔案.

     <?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://java.sun.com/xml/ns/javaee"

              xmlns:j2ee="http://java.sun.com/xml/ns/javaee"

              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5"

              xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

                                          http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

 

              <description>HelloWorld Service</description>

              <display-name>HelloWorldWAR</display-name>

 

              <servlet>

                            <description>Endpoint for HelloWorld Web Service</description>

                            <display-name>HelloWorldWebService</display-name>

                            <servlet-name>HelloWorldPort</servlet-name>

                            <servlet-class>endpoint.HelloWorld</servlet-class>

                            <load-on-startup>0</load-on-startup>

              </servlet>

 

              <servlet-mapping>

                            <servlet-name>HelloWorldPort</servlet-name>

                            <url-pattern>/HelloWorldService</url-pattern>

              </servlet-mapping>

              <session-config>

                            <session-timeout>60</session-timeout>

              </session-config>

</web-app>

 

4.3 拷貝檔案

cp -r build/classes/service/endpoint ./WEB-INF/classes/

cp build/generated/* archive/WEB-INF/wsdl/

 

4.4打包

jar cvf helloworld-webservice.war WEB-INF/

 

5.      配置

先啟動伺服器,

asadmin.bat start-domain domain1

配置到伺服器中,

asadmin.bat deploy --user admin --password adminadmin --host localhost --port 4848 --contextroot helloworld-webservice --upload=true --target server helloworld-webservice.war

 

三.   用戶端

1.      用戶端類.

在client/下,

package client;

 

import javax.xml.ws.WebServiceRef;

import endpoint.HelloWorldService;

import endpoint.HelloWorld;

 

public class WSClient{

 

       @WebServiceRef(wsdlLocation=

       "http://localhost:8080/helloworld-webservice/HelloWorldService?WSDL")

       

       static HelloWorldService service;

       

       public static void main(String[] args){

              try{

                     WSClient client = new WSClient();

                     client.callEndpoint(args[0]);

              }catch(Exception e){

                     e.printStackTrace();

              }

       }

       

       public void callEndpoint(String name){

              try{

                     HelloWorld port = service.getHelloWorldPort();

                     System.out.println(port.sayHello(name));

              }catch(Exception e){

                     e.printStackTrace();

              }

       }

}

 

2.      產生相關檔案

在編譯用戶端類之前, 需要從服務端公開中的WSDL產生相關的檔案.

wsimport.bat -keep -d ./build/classes/client http://localhost:8080/helloworld-webservice/HelloWorldService?WSDL

 

3.      編譯用戶端類

javac-d ./build/classes/client -classpath $GLASSFISH_HOME/lib/javaee.jar/;$GLASSFISH_HOME/lib/appserv-ws.jar/;./build/classes/client client/WSClient.java

  

四.   執行

在build/classes/client/下,

appclient.bat -mainclass  client.WSClient Duke

 

你會看到如下反饋

Hello Duke!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.