JAX-WS 2 0 an HelloWorld例子

                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,如果用DosLinux的话,请适当更改相应的形式.

例子中执行中的命令行以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!

           

猜你喜欢

转载自blog.csdn.net/qq_44910624/article/details/89450979