一、采用CXF+Spring构建WebService服务端
(1)在Myeclipse中创建一个web工程,并将Apache-cxf-2.3.x/lib中的jar包拷贝到:工程名\WebRoot\WEB-INF\lib下。
(2)在工程中编写WebService的interface和implements,注意在编写接口和实现类的过程中需要应用到各种类型的Annotation,用来描述web服务。
(3)修改:工程名\WebRoot\WEB-INF下的web.xml,主要是添加有关CXF构建服务的web描述,通常添加如下:
其中<servlet-mapping>中的<url-pattern>中设置的是对服务请求时的拦截(在实际应用中常常输入的URL到这一级,产看在此工程中总共部署了几个服务,以及每个服务下的方法名和服务的targetNamespace)。
(4)添加beans.xml,这个是Spring的配置文件。这个文件在工程名\WebRoot\WEB-INF下。通常配置如下:
5)将服务部署到Tomcat中,启动服务,输入:http://ip地址:端口号/工程名/web.xml中配置的拦截名/beans.xml中的address配置名称?wsdl.
2、JAX-WS annotation
主要常用接口:
只有输入值,无返回值 |
|
对方法进行注解 |
|
对输入参数进行注解 |
|
对返回数据进行注解 |
|
注解一个web服务 |
@WebService,必选的标注。用于导出的服务接口及其实现类
name |
定义导出的服务接口的名字,对应于WSDL文档中wsdl:portType。默认是服务接口的Java类名加PortType |
targetNamespace |
定义导出的服务接口的名域(namespace),默认是倒置的服务接口Java包名。如demo.cxf.UserService的名域将会是http://cxf.demo/ |
serviceName |
定义服务名,与名域一起唯一标识一个服务。默认是其Java类名 |
wsdlLocation |
其WSDL文档URL。可由服务器容器自动产生 |
endpointInterface |
指定服务接口的Java类。通常用于服务实现类的标注。应当指定类的全名,如demo.cxf.UserService |
portName |
对应WSDL文档中的wsdl:port元素。默认是Java类名加Port |
@WebMethod,可选的标注,用于服务接口的方法
operationName |
指定方法在WSDL文档中的名字,客房端用此名字调用方法 |
action |
Specifies the value of the soapAction attribute of the soap:operation element generated for the method. The default value is an empty string. |
exclude |
生成WSDL文档时将该方法排除在外 |
@SOAPBinding,可选的标注,用于指定生成的SOAP定义文档风格。关于此标注再详细的信息请查阅SOAP标准等参考资料
style |
Style.DOCUMENT (默认) Style.RPC |
SOAP消息风格 |
use |
Use.LITERAL (默认) Use.ENCODED |
SOAP数据编码方式 |
parameterStyle |
ParameterStyle.BARE ParameterStyle.WRAPPED (默认) |
Specifies how the method parameters, which correspond to message parts in a WSDL contract, are placed into the SOAP message body. A parameter style of BARE means that each parameter is placed into the message body as a child element of the message root. A parameter style of WRAPPED means that all of the input parameters are wrapped into a single element on a request message and that all of the output parameters are wrapped into a single element in the response message. If you set the style to RPC you must use the WRAPPED parameter style. |
@RequestWrapper,可选的标注,用于指定如何包装客户端调用服务方法使用的参数
@ResponseWrapper,可选的标注,用于指定如何包装客户端调用服务方法的返回值
@WebFault,可选的标注,用于注解服务接口方法抛出的异常
name |
异常的名字 |
targetNamespace |
对应的名域,默认是服务接口的名域 |
faultName |
实现该异类的类名 |
@WebParam,可选的标注,用于指定方法参数的使用方式
name |
在WSDL文档中的名字,默认是arg0,arg1… |
targetNamespace |
对应的名域。默认是服务接口的名域 |
mode |
Mode.IN (默认)、Mode.OUT、Mode.INOUT对于Java程序没有意义 |
header |
true或者false(默认),指定该参数是否在SOAP消息头部发送 |
partName |
Specifies the value of the name attribute of the wsdl:part element for the parameter when the binding is document. |
@WebResult,可选的标注,用于指定返回值的使用方式
name |
返回值在WSDL文件中的名字。默认是return |
targetNamespace |
对应的名域。默认是服务接口的名域 |
header |
true或者false(默认),指定该参数是否在SOAP消息头部发送 |
partName |
Specifies the value of the name attribute of the wsdl:part element for the parameter when the binding is document. |
具体请参考j2EE API是如下两个包:javax.jws 、javax.jws.soap
3、CXF之JAXB
通常情况下我们不直接传对象,因为直接传递对象安全性差,而且暴露了实体对象。所以我们选择传递XML文件,当然也可以传递JSON对象。对于传递XML,JAX-WS采用的是JAXB工具。
JAXB(Java Architecture for XML Binding)提供了一个快速而方便的方式绑定XML Schemas和java,使java程序员能够很方便的在java应用程序中处理XML数据。JAXB提供了将XML文档解组为java内容树的方法, 以及将java内容树重新编组回XML文档的方法。JAXB同样也提供了一种从java对象生成XML Schema的方式。
这里有几个重要的定义:
编组(Marshalling)是把内存中的数据转化到存储媒介上的过程。因此在 Java 和 XML 环境中,编组就是把一些 Java 对象转化成一个(或多个) XML 文档。在数据库环境中,则是把 Java 表示的数据存入数据库。显然,编组的秘密在于把 Java 实例中的面向对象结构转化成适用于 XML 的 扁平结构,或者 RDBMS 中的关系结构(使用 Java 技术转换到 OODBMS 实际上很简单)。
解组(Unmarshalling) 是把数据从存储媒介转换到内存中的过程--正好与编组相反。因此需要把 XML 文档解组到 Java VM 中。这里的复杂性不是在扁平数据中,因为这不是必需的,而在于从正确的数据到正确的 Java 代码变量的映射。如果映射是错误的,就不可能正确地访问数据。当然,如果再尝试重新编组还会造成更大的问题,并且问题传播得很快。
JAXB 数据类型相互映射:
JAXB annotation
@XmlRootElement 注解用于标注类或枚举类型,用它标注的类在映射后的 schema 中会以一个全局元素的形式出现,元素的类型是一个包含 Java 类属性的 XML 复杂数据类型。我们可以通过 @XmlRootElement 注解的 name 属性来定制映射的 schema 全局元素的名称,一般来说以 @XmlRootElement 标注的类在相应的 XML 文档中会以最外层或根节点形式出现。 |
|
@XmlElement 注解用于标注 Javabean 的属性,用它标注的属性在映射后的 schema 中以元素的形式出现,所有 Javabean 属性映射的元素组合成为 @XmlType 映射的复杂数据类型。我们可以通过 @XmlElement 注解的 name 属性定制映射后的 XML 元素的名称,用 required 属性来指定该元素是否必须出现,用 nillable 属性来指明该元素是否允许空值。 |
|
XmlAccessType |
用于控制字段或属性的序列化。 FIELD ,JAXB 绑定类中的每个非静态、非瞬态字段将会自动绑定到 XML NONE, 只有使用一些 JAXB 注释专门对它们进行注释的所有字段或属性才绑定到 XML。 PROPERTY, JAXB 绑定类中的每个获取方法/设置方法对将会自动绑定到 XML。 PUBLIC_MEMBER, 每个公共获取方法/设置方法对和每个公共字段将会自动绑定到 XML。 |
@XmlType 注解用于标注类或枚举类型,用它标注的类在映射后的 schema 中中会以一个 XML 复杂数据类型的形式出现。可以通过 @XmlType 注解的 name 属性来定制映射的 XML 数据类型的名称,用 propOrder 属性来定制映射后的复杂数据类型的内容顺序等。 |
|
@XmlElement 注解用于标注 Javabean 的属性,用它标注的属性在映射后的 schema 中以元素的形式出现,所有 Javabean 属性映射的元素组合成为 @XmlType 映射的复杂数据类型。我们可以通过 @XmlElement 注解的 name 属性定制映射后的 XML 元素的名称,用 required 属性来指定该元素是否必须出现,用 nillable 属性来指明该元素是否允许空值。 |
|
@XmlTransient表明当前字段不用映射成为xml的属性 |
|
@XmlAttribute 注解用于标注 Javabean 属性,用它标注的属性在映射后的 schema 中以元素属性形式表现。我们可以通过 @XmlAttribute 注解的 name 属性来定制映射后的名称,用 required 属性来指定是否映射后的属性为必须出现的。 |
|
使用这两个主要是为了那种 xml data type无法映射为Java object而准备的,比如Collection和Map及实现类等。 例:@XmlJavaTypeAdapter(AdapterPurchaseListToHashMap.class)// 使用自定义的实现 XmlAdapter 接口的适配器 for custom marshaling。 |
对于基本类型(如int, long, double, string),不需要添加任何的annotation就可以进行把java data type映射到web service schema data type,即使是自定义的class来包装基本类型也不需要添加任何的annotation就可以进行把java data type映射到web service schema data type。
但总是有一些特殊的data type,如
1. BigDecimal Type
2. java.net.URI Type
3. Duration
4. Binary Types
5. XMLGregorianCalendar Type
6. UUID Type
7. Typed Variables
8. Collections Types
9. Array Types
10. Enum type
请参考:
² http://docs.sun.com/app/docs/doc/820-1072/ahigx?l=zh_TW&a=view
² http://www.ibm.com/developerworks/cn/webservices/1003_sunzg_jaxb/
具体请参考j2EE API是如下两个包:
² javax.xml.bind.annotation.adapters
@WebResult,可选的标注,用于指定返回值的使用方式
name |
返回值在WSDL文件中的名字。默认是return |
targetNamespace |
对应的名域。默认是服务接口的名域 |
header |
true或者false(默认),指定该参数是否在SOAP消息头部发送 |
partName |
Specifies the value of the name attribute of the wsdl:part element for the parameter when the binding is document. |
具体请参考j2EE API是如下两个包:javax.jws 、javax.jws.soap
4 、CXF之WSDL
WSDL 是一种XML Application,他将Web服务描述定义为一组服务访问点,客户端可以通过这些服务访问点对包含面向文档信息或面向过程调用的服务进行访问(类似 远程过程调用)。WSDL首先对访问的操作和访问时使用的请求/响应消息进行抽象描述,然后将其绑定到具体的传输协议和消息格式上以最终定义具体部署的服 务访问点。相关的具体部署的服务访问点通过组合就成为抽象的Web服务。
WSDL 文档将Web服务定义为服务访问点或端口的集合。在 WSDL 中,由于服务访问点和消息的抽象定义已从具体的服务部署或数据格式绑定中分离出来,因此可以对抽象定义进行再次使用:消息,指对交换数据的抽象描述;而端口类型,指操作的抽象集合。用于特定端口类型的具体协议和数据格式规范构成了可以再次使用的绑定。将Web访问地址与可再次使用的绑定相关联,可以定义一个端口,而端口的集合则定义为服务。因此,WSDL 文档在Web服务的定义中使用下列元素:
l Types - 数据类型定义的容器,它使用某种类型系统(一般地使用XML Schema中的类型系统)。
l Message - 通信消息的数据结构的抽象类型化定义。使用Types所定义的类型来定义整个消息的数据结构。
l Operation - 对服务中所支持的操作的抽象描述,一般单个Operation描述了一个访问入口的请求/响应消息对。
l PortType - 对于某个访问入口点类型所支持的操作的抽象集合,这些操作可以由一个或多个服务访问点来支持。
l Binding - 特定端口类型的具体协议和数据格式规范的绑定。
l Port - 定义为协议/数据格式绑定与具体Web访问地址组合的单个服务访问点。
l Service - 相关服务访问点的集合。
相关推荐
本篇文章将详细介绍如何通过客户端编程方式使用Java调用WebService。 首先,让我们理解Java中调用WebService的基本步骤: 1. **获取WSDL文件**:WSDL是WebService的接口定义,它描述了服务的位置、服务提供的操作...
在IT行业中,VB6.0(Visual Basic 6.0)是微软公司开发的一款经典编程环境,用于构建Windows桌面应用程序。而Web Service是一种基于互联网的、采用标准XML(Extensible Markup Language)进行通信的软件系统,它允许...
整个过程涉及了从创建业务逻辑封装到Web服务标准化的多个层面,要求开发人员对EBS架构有深入的理解,同时熟悉PL/SQL编程和Oracle Integration Repository的配置。这对于提升企业的信息化水平、优化业务流程具有重要...
1. "部署自己的web project到tomcat.docx":这份文档可能详细阐述了如何将包含WebService的Web项目部署到Tomcat服务器上的步骤,包括配置环境、打包项目、启动服务器以及测试服务的过程。 2. "ws处女作.docx":此...
Web服务(WebService)是一种基于互联网的、用于不同应用程序之间互相通信的技术。它的核心目标是让软件应用能够跨过网络障碍,实现异构系统间的无缝数据交换。在本教程中,我们将深入探讨Web服务,特别是JSON作为...
### SAP WebService 开发配置详解 #### 第一章:SAP 创建 WS 外部系统调用 SAP ##### 1.1 概要技术说明 **WebService** 是构建互联网分布式系统的基本部件之一,它已经成为企业应用集成 (Enterprise Application ...
### SAP调用外部WebService知识点详解 #### 一、概述 SAP系统中调用外部WebService是一种常见的集成场景,主要用于实现SAP系统与非SAP系统的数据交换或业务流程交互。本文将详细介绍如何在SAP系统中配置并调用外部...
### WebService之通俗理解 #### 一、WebService简介与应用场景 WebService是一种标准的网络服务,它使得不同系统之间可以通过标准的协议(如HTTP)进行数据交换和服务调用,而无需关心底层实现细节。WebService...
【WebService之CXF详解】 1. WebService概念解析: WebService是一种基于互联网的、平台独立的通信方式,它允许不同的系统之间通过网络交换数据,实现了应用程序间的互操作性。这种技术利用XML(eXtensible Markup...
本篇文章将详细探讨如何使用CXF实现WebService,并通过实例进行深入解析。 **一、CXF简介** Apache CXF是一个强大的开源工具,它提供了多种方式来创建和使用Web服务,包括SOAP、RESTful API、XML以及JSON等。CXF...
【WebService详解】 WebService是一种基于Web的应用程序接口,它利用HTTP协议进行通信,使得不同系统间的应用程序可以相互通信。在本教程中,我们将深入探讨WebService的核心概念和技术。 **1. WebService工作原理...
2. **创建WebService服务**:使用Axis2提供的工具或编程方式,将SSH中的服务接口转换为WebService接口。这通常涉及到 Axis2的`services.xml`配置文件,用于定义服务的元数据。 3. **配置多个WebService接口**:在`...
【WebService教程详解(二)】 在本篇教程中,我们将深入理解WebService的使用,特别是借助工具进行测试和分析。WebService是一种基于开放标准的接口,允许不同系统之间进行数据交换,通常使用SOAP(Simple Object ...
### Java开发WebService实例详解 在IT领域,尤其是企业级应用开发中,WebService作为一种标准化的、跨平台的服务交互方式,被广泛应用于系统间的数据交换与服务调用。本文将基于给定的“Java开发WebService实例”...
【Lotus Domino与WebService服务详解】 Lotus Domino是一款强大的企业级协作软件,它不仅提供了电子邮件、日历、任务管理等功能,还支持通过WebService技术与其他系统进行数据交换和交互。在本文中,我们将深入探讨...
**WebService CXF 详解** **一、WebService简介** WebService是一种基于标准的,可以在不同操作系统、编程语言之间交换数据的Web应用程序。它通过WSDL(Web服务描述语言)定义了服务接口,利用SOAP(简单对象访问...
**FileNet调用WebService配置详解** 在IT行业中,FileNet是一款强大的企业内容管理系统(Enterprise Content Management,ECM),主要用于管理企业内部的各种文档和信息。而Web Service是一种基于互联网的、松耦合...
} } 在Java中,Webservice调用时指定超时时间是一个关键的设置,因为如果没有设定或者设定不当,可能导致程序在等待响应时无限制地阻塞,从而影响整体系统的稳定性和效率。上述代码片段展示了如何在Java中通过JDK...
**WebService实例详解** 在IT行业中,WebService是一种基于开放标准(如XML、WSDL和SOAP)的Web应用程序,它能够提供跨平台、跨语言的数据交换能力。本实例将深入讲解如何利用Apache CXF和Spring框架来构建一个完整...
3. **Spring框架**:Spring是Java企业级应用的主流框架,提供了IOC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)等功能,使得开发更加灵活和模块化,同时支持多种数据访问...