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

JAX-WS开发webservice示例详解

发布时间:2020-12-17 00:11:59 所属栏目:安全 来源:网络整理
导读:? ? ? ? ? 概述 实验环境 服务端的实现 客户端的实现 [一]、概述 Java API for XML Web Services (JAX-WS)是Java程序设计语言一个用来创建Web服务的API。 在服务器端,用户只需要通过Java语言定义远程调用所需要实现的接口SEI(service endpoint interface)
? ? ? ? ?
  • 概述
  • 实验环境
  • 服务端的实现
  • 客户端的实现

[一]、概述
Java API for XML Web Services (JAX-WS)是Java程序设计语言一个用来创建Web服务的API。

在服务器端,用户只需要通过Java语言定义远程调用所需要实现的接口SEI(service endpoint interface),并提供相关的实现,通过调用JAX-WS的服务发布接口就可以将其发布为WebService接口。

在客户端,用户可以通过JAX-WS的API创建一个代理(用本地对象来替代远程的服务)来实现对于远程服务器端的调用。

当然 JAX-WS 也提供了一组针对底层消息进行操作的API调用,你可以通过Dispatch 直接使用SOAP消息或XML消息发送请求或者使用Provider处理SOAP或XML消息。

JAX-WS2.0 (JSR 224?)是Sun新的web services协议栈,是一个完全基于标准的实现。在binding层,使用的是the Java Architecture for XML Binding (JAXB,?JSR 222?),在parsing层,使用的是the Streaming API for XML (StAX,?JSR 173?),同时它还完全支持schema规范。

JAX-WS与JAX-RPC的区别?可参见:http://java.sun.com/xml/faq.html#JAX-WS-and-JAX-RPC-difference

JAX-WS一些参考资料:

  1. JAX-RPC 2.0 renamed to JAX-WS 2.0
  2. The Java web service Tutorial?
  3. javax.jws.WebService

[二]、实验环境

  • java version “1.6.0_18″、Eclipse3.7
  • maven构建项目:mvn archetype:create -DgroupId=com.micmiu.jaxws.demo -DartifactId=jaxws-demo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

[三]、服务端的实现

1.最基本的实例

编写接口代码:HelloService.java

1 package?com.micmiu.jaxws.demo;
2 ?
3 /**
4
?* blog?http://www.micmiu.com
5 *
6 * @author Michael
7 */
8 public?interface?HelloService {
9 ????String sayHello(String userName);
10 }

实现接口并添加webservice注释:HelloServiceImpl.java

com.micmiu.jaxws.demo.impl;
import?javax.jws.WebMethod;
javax.jws.WebParam;
javax.jws.WebService;
javax.jws.soap.SOAPBinding;
?
com.micmiu.jaxws.demo.HelloService;
/**
11 http://www.micmiu.com
12 *
13 * @author Michael
14 */
15 @WebService()
16 //默认SOAPBinding style = Style.DOCUMENT
17 @SOAPBinding18 class?HelloServiceImpl?implements?19 20 ????@WebMethod
21 ????public?String sayHello(@WebParam(name =?"userName") String userName) {
22 ????????return?"hi,"?+ userName +?" welcom to www.micmiu.com";
23 }
24 25 编写服务端发布代码:ServerStart.java

javax.xml.ws.Endpoint;
com.micmiu.jaxws.demo.impl.HelloServiceImpl;
ServerStart {
?????????* @param args
static?void?main(String[] args) {
????????System.out.println("start publish jax-ws ...");
HelloService service =?new?HelloServiceImpl();
Endpoint.publish("http://localhost:8082/HelloService",service);
"publish webservice successful");
}
运行ServerStart,日志如下:

start publish jax-ws ...
2012-7-12 10:56:41 com.sun.xml.internal.ws.model.RuntimeModeler getRequestWrapperClass
信息: Dynamically creating request wrapper Class com.micmiu.jaxws.demo.impl.jaxws.SayHello
2012-7-12 10:56:42 com.sun.xml.internal.ws.model.RuntimeModeler getResponseWrapperClass
信息: Dynamically creating response wrapper bean Class com.micmiu.jaxws.demo.impl.jaxws.SayHelloResponse
publish webservice successful

浏览器打开:http://localhost:8082/HelloService?wsdl?回车显示如下:

可见服务端已经发布成功。

运用JDK自动的命令:?wsgen?生成wsdl文件和异常处理的相关类

ps:如果webservice中有异常声明,必须用wsgen生成常处理的相关类之后,才能发布。

按win+R键,输入cmd回车进入命令行界面,切换到target下创建目录ws,在执行如下命令:

mkdir?wsbin wssrc wswsdl

再执行如下命令:

wsgen -cp?.;classes/ -r ws/wsdl -s ws/src -d ws/bin -wsdl com.micmiu.jaxws.demo.impl.HelloServiceImpl

生成后的目录如下:

D:workspace_devjaxws-demotarget>tree /F ws
卷 work 的文件夹 PATH 列表
卷序列号为 2AF7-9BD9
D:WORKSPACE_DEVJAXWS-DEMOTARGETWS
├─bin
│  └─com
│      └─micmiu
│          └─jaxws
│              └─demo
│                  └─impl
│                      └─jaxws
│                              SayHello.class
│                              SayHelloResponse.class
│
├─src
│  └─com
│      └─micmiu
│          └─jaxws
│              └─demo
│                  └─impl
│                      └─jaxws
│                              SayHello.java
│                              SayHelloResponse.java
│
└─wsdl
        HelloServiceImplService.wsdl
        HelloServiceImplService_schema1.xsd

2.@WebService 指定 endpointInterface 实例

修改接口代码:HelloService.java

javax.jws.soap.SOAPBinding.Style;
@WebService
(style = Style.DOCUMENT)
@WebMethod
) String userName);
修改接口实现类:HelloServiceImpl.java

com.micmiu.jaxws.demo.HelloService;
(endpointInterface =?"com.micmiu.jaxws.demo.HelloService")
HelloService {
String sayHello(String userName) {
;
运行ServerStart 启动程序,可通过运行日志和浏览器访问wsdl文件进行验证。

[四]、客户端的实现

1. wsimport 生成客户端

按win+R键,输入cmd回车进入dos,切到target目录,然后创建目录:client、clientbin、clientsrc

target目录下运行如下命令回车即可生成客户端文件:

wsimport -s client/src -d client/bin -p com.micmiu.jaxws.clienthttp://localhost:8082/HelloService?wsdl

生成源文件目录结构如下:

D:WORKSPACE_DEVJAXWS-DEMOTARGETCLIENTSRC
└─com
    └─micmiu
        └─jaxws
            └─client
                    HelloServiceImpl.java
                    HelloServiceImplService.java
                    ObjectFactory.java
                    package-info.java
                    SayHello.java
                    SayHelloResponse.java

2.编写客户端测试程序:HelloClient.java

com.micmiu.jaxws.client;
HelloClient {
* @param args
main(String[] args) {
HelloServiceImplService service =?HelloServiceImplService();
HelloServiceImpl hello = service.getHelloServiceImplPort();
"start webservice client ...""send Michael to server "System.out.println(hello.sayHello("Michael"));
"test client end." 运行测试程序,日志如下:

start webservice client ...
send Michael to server
hi,Michael welcom to www.micmiu.com
test client end.

可见客户端调用成功。

(编辑:李大同)

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

相关内容
推荐文章
    热点阅读