use属性可以为literal,encoded;
style可以为rpc,document.
我们来对五种类型的style/use决定的 binding作一比较,
分别是rpc/literal,
document/literal none-wrapper,
document/literal with wrapper,
rpc/encoded,
document/encoded。
从生成soap消息的角度看
rpc和document的差别在于方法的操作名是否出现在生成的Soap消息中。
literal和encoded编码方式的差别在于参数类型是否出现在生成的Soap消息中。
rpc/encoded能够完整地表示一个方法调用,但性能很差,而且不能校验Soap消息的有效性。
rpc/literal不对参数类型进行编码,但仍然无法对Soap消息进行校验。
document/encoded没有意义,因为没有方法名,对参数类型编码没有什么意义。
document/literal none-wrapper无法生成操作名,适用于完整的文档作为参数传递给方法的场景。
document/literal with wrapper应该是目前使用最多的方式。
先看一段Soap消息:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:jax="http://jaxws.webserver.siyaa.cn/"> <soapenv:Header/> <soapenv:Body> <jax:Call> <operation>?</operation> </jax:Call> </soapenv:Body> </soapenv:Envelope>
如果我们只做一个客户端去封装这样一个saop消息,那么对于以上五中组合有什么区别呢?
抱着这个疑问本人一一测试,最终发现
document/literal none-wrapper
组合的soap消息跟其它的不一样,其对应消息应该是
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:jax="http://jaxws.webserver.siyaa.cn/"> <soapenv:Header/> <soapenv:Body> <jax:Call> <jax:operation>?</jax:operation> </jax:Call> </soapenv:Body> </soapenv:Envelope>
细心的人应该可以发现 请求参数operation前面多了一个前缀,若没有此前缀则会找不到参数.
wsdl中的style 和use 可以很容易的获得,但是 wrraped 和 bare的是如何区分的呢?
这个区分不是很明显,不仔细看是发现不了的:
wrraped的输入元素的名称与操作名称相同,bare的不同. 另外bare的请求参数只能有一个.
就这么简单...
OK,现在可以根据wsdl文件轻松组装自己的soap消息了吧,在此记录可以在以后忘记了快速找到解决方法.也希望给跟我有同样困惑的人一些提示.
相关推荐
当开发Web服务时,理解WSDL的SOAP绑定和样式是非常重要的,因为它们直接影响到服务的消费方式和消息的格式。选择正确的样式可以提高服务的可维护性,简化客户端的实现,同时提高整体系统的互操作性。在实际应用中,...
2. `<message>` 元素:定义每个消息的部件,包括消息名称、参数和返回类型。 3. `<portType>` 元素:描述一个 Web Service 的接口,定义了可被执行的操作和相关的消息。 4. `<binding>` 元素:定义每个端口的消息...
3. **@SOAPBinding注解**: `@SOAPBinding`注解用于指定SOAP消息的风格和使用方式。在示例中,`style = Style.DOCUMENT`表示使用文档样式,这意味着XML消息的内容将直接映射到方法参数。`use = Use.LITERAL`表示使用...
@SOAPBinding(style = Style.DOCUMENT, use = Use.LITERAL, parameterStyle = ParameterStyle.WRAPPED) public class HelloWorldImpl implements HelloWorld { @Override public String sayHello(String name) { ...
### WebService之WSDL自学笔记 #### 1、WSDL概述 WSDL(Web Services Description Language,网络服务描述语言)是一种基于XML的标准语言,用于描述Web服务及其如何被访问。WSDL提供了描述服务的方式,包括服务的...
### WebService之WSDL文件详解 #### 一、WSDL概述 **Web Services Description Language (WSDL)**,即Web服务描述语言,是一种基于XML的格式,用于描述Web服务的接口和绑定,以及如何访问这些服务。WSDL允许将Web...
WSDL文件是WebService的核心组成部分之一,它描述了服务的功能和如何使用这些功能。以下是一个简单的WSDL文件示例: ```xml <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns=...
- **Bindings**: 将抽象的操作绑定到具体的传输协议和消息格式上,比如SOAP over HTTP。 - **Services**: 定义了实际的服务端点,即服务的实际位置和访问方式。 #### WSDL文件示例 为了更好地理解WSDL的各个组成...
本文将详细介绍两种主流的Java调用Webservice的方式:Axis和SOAP,并通过具体代码示例进行阐述。 #### 二、Axis 方式调用 Webservice ##### 1. Axis简介 Apache Axis 是一个开放源代码项目,它为开发和部署基于...
<soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost/CalculatorService"/> <soap:body use="encoded" encodingStyle=...
@SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use = SOAPBinding.Use.LITERAL) public class CrudTable { @WebMethod @WebResult(name = "crudData") public String crudData(String data) { // 实现方法...
- **端口类型**: 定义了服务的操作和消息交换模式。 - **绑定**: 规定了服务的具体实现方式,包括传输协议和编码方式。 - **服务**: 定义了服务的端点信息,包括URL地址。 通过以上内容的学习,我们可以了解到Java ...
本文将深入探讨如何使用Java技术来构建和调用WebService,主要关注基于SOAP协议的WebService实现方式。 #### 一、使用JDK Web Service API实现基于SOAP消息的Web服务 ##### 1. 创建WebService EndPoint 要创建一个...
总结,Axis2 Webservice端例子旨在帮助开发者了解如何在Axis2环境下构建和发布Web服务。通过定义服务接口、实现业务逻辑、创建WSDL描述和服务打包,以及在服务器上部署和调用,我们可以掌握Axis2的核心工作原理。...
WebService是一种基于XML标准的跨平台、跨软件供应商的服务组件,它允许不同系统间的应用程序进行互操作和分布式通信。这种技术的核心在于利用XML(可扩展标记语言)来描述数据,XML Schema来定义数据结构,以及SOAP...
同时,还可以定义输入处理器(`<inHandlers>`)来增强安全性,指定风格(`<style>`)和使用(`<use>`)以控制消息的封装方式,以及作用域(`<scope>`)确定服务的生命周期。 - **Axis**:同样通过XML配置文件(如`...
@SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.BARE) public interface HelloWorld { String sayHello(String name); } ``` ...
本文详细介绍了如何使用Java结合XFire框架来实现WebService接口的开发和调用。通过实际操作和示例代码,我们不仅了解了服务端的搭建过程,还学会了如何在客户端调用这些接口。这对于开发分布式系统或进行跨平台服务...