前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用JAX-WS构建Web Services

使用JAX-WS构建Web Services

作者头像
全栈程序员站长
发布2022-09-14 09:21:16
6270
发布2022-09-14 09:21:16
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

使用JAX-WS构建Web Services

JAX-WS简写为 Java Api For Xml Web Service。JAX-WS是使用XML构建Web Service与Client进行交流通信的技术。

在 JAX-WS中,Web Service操作调用表现为以XML为基础的协议如SOAP协议。SOAP定义了封装架构,编码规则以及Web Service中调用和回应表现的规则。这些调用和回应在HTTP基础上以SOAP规范的消息进行传递。

尽管 SOAP协议是很复杂的,但是JAX-WS隐藏了开发人员面对的复杂性。在服务器端,开发者可以通过在使用java语言接口中定义方法来制定Web Service。开发者可以编写一个或者多个类来实现这些方法。客户端程序也很容易编写。客户端会创建一个代理(表现服务器端的本地对象)并且简单的调用代理中的方法即可。在JAX-WS中,开发者不必去创建和解析SOAP消息。JAX-WS运行系统会自动完成调用和回应之间SAOP消息的转换。

使用 JAX-WS,客户端和服务器端都有一个很大的优势:java编程语言的平台独立性。此外,JAX-WS并不限制:JAX-WS客户端程序可以访问不运行在java平台上的Web Servicce。这种灵活性是由于Web Service采用了W3C定义的技术规范:Http,SOAP,WSDL。

如何创建一个Web Service和Client并将他们部署。

开发一个 JAX-WS Web Service首先是要定义一个类标示了javax.jws.WebService注释。@WebService注释定义了一个Web Service终端。

Service终端接口或者 Service终端实现(SEI)是一个java接口和类,其中定义了客户端可以调用的方法。建立一个JAX-WS终端时接口并不是必须的。Web Service实现类定义了SEI。

你也可以通过向实现类的 WebService注释中添加endpointInterface 元素来指定外部接口。之后你必须定义一个接口并且将其中需要实现的方法声明为public。

创建Web Service和Client的步骤

1.编写实现类

2.编译实现类

3.添加部署 Web Service必须的文件

4.打包成 WAR

5.部署 WAR文件

6.编写 Client类

7.产生和编译连接到 Service需要的文件

8.编译 Client类

9.运行 Client

JAX-WS 终端要求

² 实现类必须注释为 javax.jws.WebService或者javax.jws.WebServiceProvider。

² 实现类可以参考通过 WebService注释中的endpointInterface元素。但是这不是必须的。如果WebService注释中没有endpointInterface元素的话,SEI会默认的为实现类定义一个。

² 实现类的方法必须是 public,不能使final或者static。

² 被暴露给 Web Service Client的方法必须被注释为javax.jws.WebMethod。

² 实现类不能使 final和abstract。

² 实现类必须有一个默认的构造函数。

² 实现类不能定义 finalize方法。

² 实现类必须在他生命周期回调函数中必须用 javax.annotation.PostConstruct或者javax.annotation.PreDestroy注释。

PostConstruct方法由容器在实现类开始向 Web Service Client做出反应之前调用。

PreDestroy方法由容器在终端移出操作之前调用。

编写Service终端实现类

在这个例子中,实现类 Hello通过@WebService注释被定义为Service终端。Hello中有一个sayHello方法,被注释为@WebMethod。@WebMethod注释向Web Service Client暴露了被注释的方法。sayHello方法向客户段返回一通过参数name进行组装的问候字符串。这个实现类必须有一个默认的声明为public,无参数的构造函数。

package helloservice.endpoint;

import javax.jws.WebService;

@WebService

public class Hello {

private String message = new String(“Hello, “);

public void Hello() {}

@WebMethod

public String sayHello(String name) {

return message + name + “.”;

}

}

简单的JAX-WS客户端

HelloClient是一个可以访问 Hello对象的sayHello方法的独立的客户端程序。这个调用是通过一个本地对象port实现的,当然这个本地对象port是远程Service对象的一个代理。

编写客户端程序

1. 使用 javax.xml.ws.WebServiceRef注释可以声明一个Web Service的参考。@WebServiceRef注释使用wsdlLocation元素指定一个已经部署的Service的wsdl的URI

@WebServiceRef(wsdlLocation=”http://localhost:8080/helloservice/hello?wsdl”)

2. 找回 Service的代理,看作一个port,这是通过调用Service的一个函数getHelloPort实现的

Hello port = service.getHelloPort();

Port实现了被 service定义的SEI

3. 调用 port的sayHello方法,并传入一个参数name。

String response = port.sayHello(name);

类的实现如下

package simpleclient;

import javax.xml.ws.WebServiceRef;

import helloservice.endpoint.HelloService;

import helloservice.endpoint.Hello;

public class HelloClient {

@WebServiceRef(wsdlLocation = “http://localhost:8080/helloservice/hello?wsdl”)

static HelloService service;

/**

* @param args the command line arguments

*/

public static void main(String[] args) {

try {

HelloClient client = new HelloClient();

client.doTest(args);

} catch (Exception ex) {

ex.printStackTrace();

}

}

public void doTest(String[] args) {

try { // Call Web Service Operation

System.out.println(

“Retrieving the port from the following service: ”

+ service);

Hello port = service.getHelloPort();

System.out.println(“Invoking the sayHello operation on the port.”);

String name;

if (args.length > 0) {

name = args[0];

} else {

name = “No Name”;

}

String response = port.sayHello(name);

System.out.println(response);

} catch (Exception ex) {

ex.printStackTrace();

}

}

}

本文参考 Javaee5官方文档,源码在NetBeans6.0中使用,具体可以在sun官方网站下载

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/159707.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档