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 - 相关服务访问点的集合。
ü WSDL描述
<!--这里的name是发布的service类名 + "Service", targetNamespace 是取决于发布类所在的包 -->
<wsdl:definitions name="HelloService" targetNamespace="http://service/">
<!--types 的作用是定义输入输出参数都是什么样子的(类型) -->
<wsdl:types>
<!-- targetNamespace 是取决于发布类所在的包 -->
<xs:schema elementFormDefault="unqualified" targetNamespace=http://service/ version="1.0">
<!--输入参数名字为‘sayHello’,类型是复杂类型‘sayHello’,在下面定义 -->
<xs:element name="sayHello" type="tns:sayHello"/>
<!--输出参数名字为‘sayHelloResponse’,类型是复杂型sayHelloResponse, 在下面定义-->
<xs:element name="sayHelloResponse" type="tns:sayHelloResponse"/>
<xs:element name="user" type="tns:user"/>
<!--输入参数类型的具体定义:包含一个element,名字为arg0,类型为user-->
<xs:complexType name="sayHello">
<xs:sequence>
<xs:element minOccurs="0" name="arg0" type="tns:user"/>
</xs:sequence>
</xs:complexType>
<!-- 这里的name 是自动生成的。当然,也可以在代码中指定名字。
Public @WebResult(name="sayHelloResult") User sayHello(@WebParam(name="name") User user)
-->
<xs:complexType name="user">
<xs:sequence>
<xs:element minOccurs="0" name="name" type="xs:string"/>
<xs:element minOccurs="0" name="age" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="sayHelloResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="tns:user"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
</wsdl:types>
<!--这个message代表输入信息。这个输入信息的类型是sayHello,在<types>中定义过 -->
<wsdl:message name="sayHelloResponse">
<wsdl:part element="tns:sayHelloResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<!--这个message代表输出信息。这个输出信息的类型是sayHelloResponse,在<types>中定义过 -->
<wsdl:message name="sayHello">
<wsdl:part element="tns:sayHello" name="parameters">
</wsdl:part>
</wsdl:message>
<!--portType 就是我们定义的接口。一个接口对应一个port -->
<wsdl:portType name="Hello">
<wsdl:operation name="sayHello">
<wsdl:input message="tns:sayHello" name="sayHello"> </wsdl:input>
<wsdl:output message="tns:sayHelloResponse" name="sayHelloResponse"> </wsdl:output>
</wsdl:operation>
</wsdl:portType>
<!--把接口进行 soap 绑定-->
<wsdl:binding name="HelloServiceSoapBinding" type="tns:Hello">
<!-- 这里指明绑定的协议为 http,style为document-->
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="sayHello">
<!-- 具体方法的绑定类型定义-->
<soap:operation soapAction="" style="document"/>
<wsdl:input name="sayHello">
<!--literal文本 -->
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="sayHelloResponse">
<!--literal文本 -->
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<!--把n个接口放到一起,总称为一个service -->
<wsdl:service name="HelloService">
<!--这里一个port就是一个接口。对应的绑定刚刚定义过 -->
<wsdl:port binding="tns:HelloServiceSoapBinding" name="HelloPort">
<!--这个接口的地址 -->
<soap:address location="http://localhost:8080/testcxf/ws/hello"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
分享到:
相关推荐
**五、CXF与Spring的集成** CXF与Spring的紧密集成使得配置和服务管理变得更加方便。可以通过Spring的依赖注入(DI)来管理和控制服务实例,也可以利用Spring的AOP(面向切面编程)实现事务、日志等功能。 **六、...
**Apache CXF详解** Apache CXF是一个开源的Web服务框架,它将原本复杂的Web服务开发流程简化,提供了丰富的API和工具,让开发者能够快速构建出高性能、高质量的Web服务。其主要特点包括: 1. **支持多种协议**:...
**WebService CXF 详解** **一、WebService简介** WebService是一种基于标准的,可以在不同操作系统、编程语言之间交换数据的Web应用程序。它通过WSDL(Web服务描述语言)定义了服务接口,利用SOAP(简单对象访问...
在Java世界中,Apache CXF是一个广泛使用的开源框架,它允许开发者创建和消费Web服务。在Web服务开发中,拦截器扮演着至关重要的角色,它们提供了在消息发送和接收过程中插入自定义逻辑的能力。本篇文章将深入探讨...
CXF与Axis2框架区别详解 CXF和Axis2是两个流行的Webservice框架,都是由现有的项目逐渐演化而来的。Axis2是由Axis1.x系列演化而来,而Apache CXF则是由Celtix和XFire项目整合而生。在本文中,我们将探讨CXF和Axis2...
Apache CXF 和 Spring 整合详解 在 Java 开发领域,Apache CXF 是一个流行的开源框架,用于构建和开发服务导向架构(SOA)的应用程序。它提供了多种方式来实现 Web 服务,包括 JAX-WS 和 JAX-RS。另一方面,Spring ...
**Spring整合CXF详解** Spring框架与Apache CXF的整合是企业级Java应用中常见的实践,主要用于构建基于SOAP和RESTful服务。这个"Spring整合CXF demo"项目提供了一个直观的例子,帮助开发者理解如何在Spring环境中...
【WebService CXF详解与入门】 WebService是一种允许不同系统之间进行通信和交互的标准协议,它基于HTTP协议,使得应用程序可以无视具体实现细节地调用互联网上的服务。这种技术使得分布式应用程序的发展成为可能,...
#### 三、代码实现详解 ##### 1. 创建自定义拦截器`InInterceptor` ```java package com.util; import java.io.IOException; import java.io.InputStream; import org.apache.cxf.helpers.IOUtils; import org....
【CXF技术详解】 CXF,全称CXF Commons eXtensible Services Framework,是一个开源的Java服务框架,主要用于构建和开发服务导向架构(SOA)中的Web服务。CXF支持多种Web服务标准,包括WS-*(如SOAP、WSDL、WS-...
### CXF生成的WSDL详解 #### 一、概述 WSDL(Web Services Description Language)是一种用于描述Web服务的标准XML格式。它包含了服务提供者如何访问该服务的信息,包括服务的位置、服务可用的方法以及这些方法...
【Java编写的CXF实例详解】 Java编程语言在企业级应用开发中占据着重要的地位,尤其是在Web服务领域。CXF,全称为CXF框架(Apache CXF),是一个强大的开源Java框架,用于构建和消费Web服务。它允许开发者通过Java ...
**JDK21集成CXF详解** 在Java开发中,CXF是一个广泛使用的开源框架,主要用于构建和开发服务导向架构(SOA)的应用程序。它提供了SOAP和RESTful Web服务的支持,同时也支持WS-*规范。CXF允许开发者利用Java语言的...
【CXF与Spring整合Web服务详解】 在Java世界中,Apache CXF是一个广泛使用的开源框架,用于构建和部署Web服务。它提供了丰富的功能,包括SOAP、RESTful API的支持,以及与Spring框架的深度集成。本篇文章将深入探讨...
**WebService CXF 对象传递详解** 在Web服务领域,CXF是一个非常重要的开源框架,它允许开发者创建和消费各种Web服务。CXF支持SOAP、RESTful等多种通信模式,并且能够处理复杂的对象传递,使得Web服务的数据交换...
【SSM框架详解】 SSM是Spring、SpringMVC和MyBatis的缩写,是一种常见的Java Web开发技术栈。Spring作为基础框架,负责管理对象的生命周期和依赖关系;SpringMVC是Spring的Web MVC模块,处理HTTP请求和响应;...
5. **CXF的客户端**:CXF提供了多种方式创建Web服务客户端,如静态代理、动态代理、JAX-WS客户端和JAX-RS客户端。这些客户端可以帮助开发者轻松地调用远程服务。 6. **CXF的Demo**:`Cxf_Client`文件可能包含了CXF...
【标题】:“CXF客户端启动过程详解” 【正文】: CXF(Apache CXF)是一个开源的Java框架,主要用于构建和服务导向架构(SOA)。它提供了丰富的API和工具,用于创建Web服务,既可以作为服务器端也可以作为客户端。...
【CXF 2.5.9 使用示例详解】 CXF 是一款开源的 Java 服务框架,它提供了创建和消费 Web 服务的能力。版本 2.5.9 是 CXF 的一个稳定版本,包含了丰富的功能和修复了许多已知的问题。在本教程中,我们将深入探讨如何...