加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

JAX-WS 2.0, an HelloWorld例子

发布时间:2020-12-17 02:40:40 所属栏目:安全 来源:网络整理
导读:在 JAX-RPC 1.1 中 , 开发人员需要写一个接口类 Service Endpoint Interface(SEI), 在 JAX-WS 2.0 中 , 开发人员一上来就可以直接写自己的实现类 . 通过使用 annotations, 自动生成 SEI 和其他一些文件 . 这样有助于开发人员专注于自己想开发的部分 , 而不必
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!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读