1.6
JAX-WS
开发
Web
服务
JAX-WS
是用于简化使用
Java
构造
Web
服务和
Web
服务客户机的工作的技术。该技术提供了完整的
Web
服务堆栈,可减少开发和部署
Web
服务的任务。
JAX-WS
支持
WS-I
基础总则
1.1
,后者可确保使用
JAX-WS
堆栈开发的
Web
服务能够供采用
WS-I
基础总则标准使用任意语言开发的任意客户机使用。
JAX-WS
还包括了
JAXB
(
Java Architecture for XML Binding
,
Java XML
绑定框架
)
,
和
SAAJ(SOAP with Attachments API for
Java
,
SOAP
附件
API)
。
JAXB
提供了一种非常方便的方法来将
XML
模式映射到
Java
代码的表示形式,从而支持数据绑定功能。
JAXB
消除了将
SOAP
消息中的
XML
模式消息转换为
Java
代码的工作,因而不必全面了解
XML
和
SOAP
解析。
JAXB
规范定义
Java
和
XML
模式之间的绑定。
SAAJ
提供了标准的方法来处理
SOAP
消息中包含的
XML
附件。
而且,
JAX-WS
提供了用于将
POJO
类转换为
Web
服务的注释库,从而加速了
Web
服务的开发工作。另外,它还指定了从采用
Web
服务描述语言(
Web Services Description Language
,
WSDL
)定义的服务到实现该服务的
Java
类之间的详细映射。采用
WSDL
定义的任意复杂类型都通过遵循
JAXB
规范定义的映射来映射为
Java
类。
JAX-WS
之前与
Java EE5
绑定。而
JAX-WS 2.0
规范是作为
JCP
的
JSR 224
开发的。
让我们首先创建一个网上书店订单处理
Web
服务,用于接受订单信息、配送信息和订购书籍并最终生成确认订单号作为响应。订单处理服务的代码如下
package tutorial.service;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
@WebService(serviceName = "OrderProcess",
portName = "OrderProcessPort",
targetNamespace = "http://tutorial/jaxws/orderprocess")
@SOAPBinding(style=SOAPBinding.Style.DOCUMENT,use=SOAPBinding.Use.LITERAL,
parameterStyle=SOAPBinding.ParameterStyle.WRAPPED)
public class OrderProcessService {
@WebMethod
public OrderBean processOrder(OrderBean orderBean) {
System.out.println("客户端调用processOrder"
+ orderBean.getCustomer());
System.out.println("所定书籍数量"+orderBean.getOrderBooks().length);
orderBean.setOrderId("2008123111");
return orderBean;
}
}
这是一个虚拟实现,将在控制台输出客户名和书籍数量,然后输出虚拟订单
2008123111
。
OrderBean
中包含订单信息,具体来说,其中包含对客户、订单项和配送地址对的内容。
OrderBean
代码如下:
package tutorial.service;
public class OrderBean {
private String customer;
private String shippingAddress;
private String[] orderBooks;
private String orderId;
public String getCustomer() {
return customer;
}
public void setCustomer(String customer) {
this.customer = customer;
}
public String getOrderId() {
return orderId;
}
public void setOrderId(String orderId) {
this.orderId = orderId;
}
public String getShippingAddress() {
return shippingAddress;
}
public void setShippingAddress(String shippingAddress) {
this.shippingAddress = shippingAddress;
}
public String[] getOrderBooks() {
return orderBooks;
}
public void setOrderBooks(String[] orderItems) {
this.orderBooks = orderItems;
}
}
开发
JAX-WS Web
服务的起点是一个使用
javax.jws.WebService Annotation
进行了注释的
Java
类。所使用的
JAX-WS
注释属于
Java
平台
Web
服务元数据(
Web Services Metadata for the Java Platform
)规范
(JSR-181)
的一部分。
OrderProcessService
类(带有
@javax.jws.WebService Annotation
的类)隐式地定义了服务端点接口(
Service Endpoint Interface
,
SEI
),用于声明客户机可以对服务调用的方法。除了使用
@WebMethod
注释且
exclude
元素设置为
true
的方法外,类中定义的所有公共方法都会映射到
WSDL
操作。
@WebMethod
注释是可选的,用于对
Web
服务操作进行自定义。除了
exclude
元素外,
javax.jws.WebMethod
注释还提供
operation name
和
action
元素,用于在
WSDL
文档中自定义操作名属性和
SOAP action
元素。这些属性是可选的;如果未定义,会从类名称派生缺省值。
实
现
Web
服务后,需要生成部署服务所需的所有构件,然后将
Web
服务打包为部署构件(通常为
WAR
文件),并将
WAR
文件部署到任何支持
JAX-WS 2.0
规范的兼容服务器上。通常生成的构件是提供基于服务接口将
Java
对象转换为
XML
、
WSDL
文件和
XSD
模式的功能的类。
出于测试目的,
Java 6
绑定了一个轻量级
Web
服务器,可以通过调用简单的
API
调用将
Web
服务发布到该服务器上。接下来我们将了解如何使用此方法测试
Web
服务。
发布服务
发布服务首先要生成构件,运行
wsgen
工具,以生成订单处理
Web
服务的
JAX-WS
可移植构件。此工具将读取
Web SEI
类,并生成
Web
服务部署和调用所需的所有构件。
wsgen
工具生成需要发布的
Web
服务的
WSDL
文件和
XSD
模式。
先编译
OrderProcessServie
和
OrderBean
,然后把这个两个类加入到类路径中,然后执行如下命令:
wsgen tutorial.service.OrderProcessService -wsdl
wsgen
工具提供了大量的选项,例如,其中提供了
-wsdl
选项,用于生成服务的
WSDL
和
XSD
模式。运行此命令后生成了
OrderProcess.wsdl
和
OrderProcess_schema1.xsd
。为了使用
Java 6
提供的轻量级
Web
服务器,我们在
OrderProcessService
的
main
方法增加如下代码:
public static void main(String[] args) {
Endpoint.publish("http://localhost:8080/OrderProcessWeb/orderprocess",
new OrderProcessService());
}
只用运行
OrderProcessService
就将
OrderProcessService
发布成了
Web
服务。通过
Endpoint.publish()
方法,可以方便地发布和测试
JAX-WS Web
服务。
publish()
接受两个参数:
Web
服务的位置和
JAX-WS Web
服务实现类。
publish()
方法在指定的
URL
(本例中为本地主机,端口为
8080
)创建轻量级
Web
服务器,并将
Web
服务部署到该位置。此轻量级
Web
服务器在
Java
虚拟机(
Java Virtual Machine
,
JVM
)中运行,可通过调用
endpoint.stop()
方法以有条件的方式终止。
接下我们将了解如何从
WSDL
创建
Web
服务客户机。
JAX-WS
提供了名为
wsimport
的工具,用于从
WSDL
生成
JAX-WS
可移植构件。生成的可移植构件通常包括以下内容:
-
服务端接口
(SEI)
-
服务(需要实现的服务实现类)
-
从模式类型生成的
JAXB
生成类
-
从
wsdl:fault
映射的异常类(如果有)
客户端使用生成的构件调用
Web
服务。
Web
服务客户机并不需要处理任何
SOAP
格式(如创建或解析
SOAP
消息)。这将由
JAX-WS
运行时予以处理,此运行时将使用生成的构件代码(
JAXB
生成类)。
Web
服务将处理
Java
代码(
JAXB
生成类),从而减少了开发
Web
服务客户机和对
Web
服务调用操作的工作。
先使用
wsimport
工具从
OrderProcess WSDL
生成
JAX-WS
构件。然后要创建
Web
服务客户端,后者使用生成的构件代码调用订单处理
Web
服务。要生成
JAX-WS
构件,先运行
OrderProcess
,然后执行下面的命令
wsimport -keep -p tutorial.client
http://localhost:8080/OrderProcessWeb/orderprocess?wsdl
-keep
选项指示保留生成的文件,
-p
选项指定需要在其中生成构件的包名称。
http://localhost:8080/OrderProcessWeb/orderprocess?wsdl
指定
WSDL
文件的位置。以下构件是从
OrderProcessService WSDL
生成的:
-
JAXB
类(
OrderBean
):通过读取
OrderProcessService WSDL
中定义的模式定义生成;
-
RequestWrapper
和
ResponseWrapper
类封装了
SOAP
请求和应答
-
服务类
(OrderProcess)
:客户机用于请求
Web
服务的类
-
服务接口
(OrderProcessService)
:包含着用于服务实现接口的类
接下来了解一下如何使用上面生成的构件创建
Web
服务客户端。客户端的代码如下:
package tutorial;
import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.namespace.QName;
import tutorial.client.*;
public class OrderClient {
final QName qName = new QName(
"http://tutorial/jaxws/orderprocess", "OrderProcess");
public static void main(String[] args) {
if (args.length != 1) {
System.out
.println("请指定订单处理Web服务的URL");
System.exit(-1);
}
URL url = getWSDLURL(args[0]);
OrderClient client = new OrderClient();
client.processOrder(url);
}
private static URL getWSDLURL(String urlStr) {
URL url = null;
try {
url = new URL(urlStr);
} catch (MalformedURLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
return url;
}
public void processOrder(URL url) {
OrderProcess orderProcessingService = new OrderProcess(url, qName);
OrderBean order = populateOrder();
OrderProcessService port = orderProcessingService.getOrderProcessPort();
OrderBean orderResponse = port.processOrder(order);
System.out.println("订货单号为:" + orderResponse.getOrderId());
}
private OrderBean populateOrder() {
OrderBean order = new OrderBean();
order.setCustomer("张三");
order.getOrderBooks().add("世界是平的");
return order;
}
}
上面列出的
Web
服务客户机代码执行以下任务:
-
通过传入
OrderProcess Web
服务的
WSDL URL
和服务的
QName
创建
OrderProcess
类的实例。
-
创建
OrderBean
的实例,并使用
populateOrder()
方法填充订单信息。
-
对服务调用
getOrderProcessPort()
,以检索到服务的代理(也称为端口)。端口实现服务所定义的接口。
-
调用端口的
processOrder
方法,并同时传入在上面的第二个列表项目中创建的
OrderBean
实例。
-
从服务获得
OrderBean
响应并输出订单
ID
。
如上面的客户机代码中所示,并不会处理调用
Web
服务操作时使用的任何基于
SOAP
或
XML
的格式;相反,需要处理的是输入和输出消息的
JAXB
生成类,并使用服务接口和服务类对象。存根负责从
JAXB
注释创建
SOAP
请求,并将
SOAP
响应转换回
Java
对象。
在本节中,我们了解了如何使用
JAX-WS
技术设计和开发
Web
服务。
JAX-WS
是一个非常不错的选择,因为其中提供了完整的
Web
服务堆栈,以简化
Web
服务的开发和部署。
本节中开发的订单处理
Web
服务使用文档样式的
Web
服务,可确保服务使用者和服务提供者使用
XML
文档进行通信。
XML
文档遵循定义良好的契约,而此类契约通常都是使用
XML
模式定义创建的。
XML
模式格式指定服务使用者能够调用和遵循的业务消息的契约。文档样式的
Web
服务应该是开发企业
Web
服务的首选方法。
分享到:
相关推荐
在这个"Web前端-入门教程集合"中,你将找到一系列的学习资源,帮助你逐步踏入Web前端的大门。从基础概念到实践应用,每一步都至关重要。通过深入学习和不断实践,你将能够创建出美观且功能丰富的网页应用。所以,...
它提供了丰富的控件、服务和工具,简化了Web开发流程。 2. 页面生命周期:理解Web页面从请求到响应的生命周期至关重要。这包括初始化、加载、回发和卸载等阶段,开发者需要知道在哪个阶段进行哪种操作。 3. 控件和...
**Web服务入门教程** Web服务是一种基于互联网的通信协议,允许不同系统间的应用程序进行交互和数据交换。这个教程,由MCT(微软认证讲师)和MVP(微软最有价值专家)杨永智编撰,是专为微软校园大使设计的课件,...
**Web服务入门教程** 在信息技术领域,Web服务是一种标准化的机制,允许不同应用程序之间进行通信和数据交换。这个“Web+Service入门教程”PPT旨在为初学者提供一个全面了解和掌握Web服务的基础。 1. **Web服务的...
精品课程 全程面授 千锋教育 www.qfedu.com 做真实的自己-用良心做教育 最新 Python web 开发视频教程从入门到精通 想学 Python web 开发?想成为 Python web 开发工程师?想进入 Python 行业拿高薪?但还没入行? ...
在随后的11章中从理论和实践两个方而讲解了web应用程序的创建、测试、调试和部署等环节,如服务器控件、数探访问、数据绑定、Asp.NET状态管理、XML与web开发、web应用程序中的web服务、ASP.NET身份验证、授权和安全...
WYSIWYG Web Builder 入门教程 WYSIWYG Web Builder 是一个网页制作工具,不需要编程,通过拖拽式操作,以所见即所得的方式快速制作网页。相对于 Dreamweaver 等专业工具,它更加轻量级,整个安装文件大小仅为 8.76...
Spring Web MVC是一种基于MVC模式的轻量级Java Web应用框架,它是Spring框架的一部分,主要用于简化Web层的开发。Spring Web MVC允许开发者将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller...
【Web Services入门教程】 Web服务是一种基于互联网的软件应用程序接口(API),允许不同的系统和应用程序之间进行交互。这种交互通常是通过使用开放标准如XML(可扩展标记语言)和SOAP(简单对象访问协议)来实现...
|- web前端培训班_web前端开发优质教程_前端工程师培训-黑马程序员.png |- HTML入门及基础02资料.zip |- HTML5入门及基础01资料.zip |- CSS3入门及提高 08资料.zip |- CSS3入门及提高 07资料.zip |- CSS3入门及提高 ...
WebRTC完美入门教程由康林编写,主要介绍了网页实时通信(Web Real-Time Communication)技术。这是一种在浏览器中实现点对点实时通信的技术,可以支持语音、视频通话等功能。WebRTC技术在国内资料较少,因此本教程...
NET_C#_Web_Service入门教程
web前端开发入门教程(20211215130803).pdf
Java-Web快速入门教程
本教程旨在引导初学者踏入C# Web开发的世界,通过超星阅览器进行阅读,可以方便地学习和理解相关概念。 1. **C#语言基础**:C#是微软开发的一种面向对象的编程语言,具有类型安全、垃圾回收等特点,适用于开发...
c#Web_Service入门教程.pdf
本入门教程将带你了解如何使用XFire库来创建和消费Web服务。 首先,让我们了解一下什么是XFire。XFire是一个开源的Java Web服务框架,它简化了开发过程,提供了高效且易于使用的API。XFire支持SOAP、WSDL(Web ...
《NET+Web服务入门经典+C#:C#编程篇》是一本专为初学者设计的IT教程,旨在帮助读者快速掌握.NET框架下的Web服务开发以及C#编程技术。本资源包含一系列深入浅出的章节,涵盖了从基础概念到实际应用的广泛内容。 ...
入门基础视频教程则是为初学者提供了一个系统学习Expression Web的途径。 在“Microsoft Expression Web 入门基础视频教程”中,你将学习到以下关键知识点: 1. **界面介绍**:了解Expression Web的布局,包括菜单...