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,如果用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! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |