J2SE Java基础 J2EE 设计模式 struts hibernate spring freemarker ibatis xml xslt Javascript mysql Linux 系统架构
Java高级 webwork webservice 网页制作 oracle sql server 数据库基础 软件工程 网站建设 SEO 黑客基础 名人堂 Ruby
首页 > 技术文档 > Java > webservice > JAX-WS 2.0 HelloWorld例子

JAX-WS 2.0 HelloWorld例子

作者:  来源: sun  标签:jax-ws2.0 webservice (English)

     在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!
 
追加: 通过下面的命令,可以卸掉装配好的war文件.
 
asadmin.bat undeploy --user admin --password adminadmin helloworld-webservice

相关文章
(2007年05月22日)AXIS(Java WebSerivce)全攻略
(2007年05月16日)Java中的SOAP技术
(2007年04月27日)WebService的基本概念
(2007年08月14日)新的JAX-WS 展现优势

评论列表

发表评论

赞助商