- 浏览: 111093 次
- 来自: ...
文章分类
最新评论
1, 自洽
以前曾经写过:
目前WebService不是自洽的,即一个WebService方法的参数和返回值不能是另外一个WebService,因此你不能在WebService的返回值上调用业务逻辑方法;顶多开发包做点手脚,包装几个getter/setter方法,或同构平台上在客户端拥有服务端的类定义,可以调用其方法,像.Net平台上的DataSet;参考开发包的处理,我们可以自己为WebService的返回值加入业务逻辑方法a,开发包无非是为客户端生成一堆代理类,完成序列化/反序列化,解析远程调用协议等
b,我们可以修改这些代理类,加入业务逻辑方法,只要不影响序列化/反序列化,解析远程调用协议那些原有的部分就行参考以前的远程过程调用协议,COM,RMI等,都能通过一个远程对象返回另外一个远程对象,可以调用各种方法,WebService完全应该定义其返回值、参数可以是另外一个WebService
最近看了<<我应该采用哪一种WSDL样式>>, 文中提到RPC/Literal编码方式的href属性,让我联想起以前的想法,其实如果规定客户端Stub必须是可序列化的,那么是否就有可能解决WebService的参数和返回值可以是另外的WebService呢(或说是另外的WebService的客户端Stub类呢)?
2. Content-Type
SOAP 1.1 HTTP/SOAP 消息的媒体类型为“text/xml”,其编码处理是在 RFC2376 中定义的。而 SOAP 1.2 HTTP/SOAP 消息的媒体类型为“application/soap+xml”,其编码处理是在 RFC3023 中定义的。这些 RFC 规范定义了下列行为:
SOAP 1.1: HTTP/SOAP 请求的字符集由 HTTP 头中的 ContentType 字符集参数确定。在 SOAP 消息的 XML 声明部分定义的编码特性将被忽略。如果不指定 ContentType 字符集参数,字符集将被视为 US-ASCII。
SOAP 1.2: HTTP/SOAP 请求的字符集由 HTTP 头中的 ContentType 字符集参数确定。在 SOAP 消息的 XML 声明部分定义的编码特性将被忽略。如果未指定 ContentType 的字符集参数,将使用在 XML 声明部分定义的编码特性。如果 ContentType 字符集参数或 XML 声明的编码特性均未定义,它将被视为 UTF-8。
SOAP 1.1: HTTP/SOAP 请求的字符集由 HTTP 头中的 ContentType 字符集参数确定。在 SOAP 消息的 XML 声明部分定义的编码特性将被忽略。如果不指定 ContentType 字符集参数,字符集将被视为 US-ASCII。
SOAP 1.2: HTTP/SOAP 请求的字符集由 HTTP 头中的 ContentType 字符集参数确定。在 SOAP 消息的 XML 声明部分定义的编码特性将被忽略。如果未指定 ContentType 的字符集参数,将使用在 XML 声明部分定义的编码特性。如果 ContentType 字符集参数或 XML 声明的编码特性均未定义,它将被视为 UTF-8。
Content-Type: text/html;charset=GB2312
Content-Type: text/xml; charset=utf-8
3,UTF-8,Axis?支持其它编码?How to ?希望各位看官给个下面问题的答案
POST /wstest/NetWebService/SampleSer<wbr></wbr>vice HTTP/1.1
Host: localhost
Content-Type: text/xml; charset=utf-8 <!--1, how can I change it to charset=shift_jis using axis? Thanks-->
Content-Length: length
SOAPAction: "http://tempuri.org/max"
<?xml version="1.0" encoding="utf-8"?> <!--2, how can I change it to encoding="shift_jis" using axis? Thanks-->
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchem<wbr></wbr>a-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchem<wbr></wbr>a
" xmlns:soap="http://schemas.xmlsoap.org<wbr></wbr>/soap/envelope/">
<soap:Body>
<max xmlns="http://tempuri.org/">
<a>int</a>
<b>int</b>
</max>
</soap:Body>
</soap:Envelope>
Assume the operation name is not "max", but a japanese string, and I prefer shift_jis to utf-8, then what should I do?
4, 文档交换vs. RPC模型
以下内容来自<<Webservice 的设计和模式>>
RPC(Remote Procedure Call)本质上就是远程方法的调用。尽管Webservice是基于XML的但是你仍然可以使用远程方法调用这种模式来进行Webservice的实现,尤其是在那种简单的请求相应的模型中。在这个过程中,传输中的XML文件所描述的更多是有关远程方法的信息,比如方法名,方法参数等等。
而文档交换方式,与RPC相比较在XML文件中不是做远程方法的映射,而是一份完整的自包含的业务文档,当Service端收到这份文档后,先进行预处理(比如词汇的翻译和映射),然后再构造出返回消息。这个构造返回消息的过程中,往往不再是简简单单的一个方法调用,而是多个对象协同完成一个事务的处理,再将结果返回。
这两种方式的区别,类似与打电话和发邮件的不同处理方法。在目前,对于第一种方法提供了很多自动化的工具使得远程方法的调用能够很容易的完成,而后一种方法缺少一系列工具的支持,需要开发者手工完成。
尽管如此,在此还是推荐使用文档交换的方式。由于它在以下方面具有RPC所不具备的优点。
|
以下内容来自<<我应该采用哪一种WSDL样式>>
Java 方法 :
public void myMethod(int x);
RPC/Encoded
|
<message name="myMethodRequest"> |
<soap:envelope> |
WSDL 基本达到了尽可能地简单易懂的要求。
操作名出现在消息中,这样接收者就可以很轻松地把消息发送到方法的实现。
|
|
RPC/Literal
|
<message name="myMethodRequest"> |
<soap:envelope> |
WSDL 还是基本达到了尽可能地简单易懂的要求。
操作名仍然出现在消息中。
去掉了类型编码
|
您仍然不能简单地检验此消息的有效性,因为只有
<x xsi:type="xsd:int">5</x> 行包含在 Schema 中定义的内容;其余的 soap:body 内容都来自 WSDL 定义 |
Document/Litaral
|
<types> |
<soap:envelope> |
没有编码信息
您可以在最后用任何 XML 检验器检验此消息的有效性。
soap:body ( <xElement>5</xElement> )中每项内容都定义在 Schema 中 |
WSDL 变得有些复杂。不过,这是一个非常小的缺点,因为 WSDL 并没有打算由人来读取。
SOAP 消息中缺少操作名。而如果没有操作名,发送就可能比较困难,并且有时变得不可能。
|
Document/Literal
Wrapped
|
<types> |
<soap:envelope> |
没有编码信息。
出现在 soap:body 中的每项内容都是由 Schema 定义的,所以您现在可以很容易地检验此消息的有效性。
方法名又出现在 SOAP 消息中
|
WSDL 甚至更复杂,但是这仍然是一个非常小的缺点
|
发表评论
-
The Object Primer
2004-12-11 11:21 5501,书名 被翻译成“ ... -
错误处理规范
2004-12-11 16:47 725错误处理规范 〇、概念澄清 概念 解释 错误 ... -
Java,误解为何如此之深
2005-08-24 13:50 559前几天被电话面试,问J ... -
Java:画蛇添足的编码规范
2005-09-02 13:13 540前几天公司培训编码规范: 第n条: ... -
synchronized : 规则, 推论与实践
2007-07-23 22:32 42714.3.Synchronization. Rule ... -
交互设计: 股市帮凶
2008-05-04 21:30 609同事 Y 在线操作股票时, 把"买入"点成 ... -
交互设计: 火车上的厕所
2008-05-26 17:17 572有人在动车组的厕所前等了很久, 直到乘务员路过说厕所是被锁住了 ... -
设计原则与模式: 案例介绍--CppUnit
2008-06-01 20:15 570设计原则与模式: 案例介绍--CppUnit CppUnit ... -
工作流:形参,实参,相关数据
2004-12-11 11:40 623关于形参,实参,相关数据 一、形参(FormalParame ... -
工作流:第一次发版,过程总结
2004-12-11 11:42 667交流 即时讨论:小组成员咫尺之遥,有问题立即提出并解决 ... -
工作流:第一次发版,设计总结
2004-12-11 11:43 578整体 面向接口:消息系统,持久系统等,其实现都是可替换 ... -
Beyond Workflow : An Introduction to Vitria BusinessWare
2005-09-26 10:13 778一、简介 Busines ... -
Vitria BusinessWare: 存储与访问安全
2006-03-26 15:45 709事实上,BusinessWare使用LDAP做为存储机制和 ... -
Vitria BusinessWare: 平台与软件总线
2006-04-01 12:59 779经过一段时间的使用 ... -
Vitria BusinessWare: Web Services
2006-04-01 14:30 706BusinessWare的Web Services ... -
Web Services:WSDL 1.1 规范中的几个错误
2006-04-01 16:40 680读完了WSDL 1.1的规范,令人惊讶的是发现似乎例子中有几个 ... -
C++/CLI:被忽视的集成技术
2006-05-17 20:02 715十几行代码,就使一个重要的旧系统组件,完全融入了基于.Ne ... -
AJP/JK:异构Web平台的集成技术
2006-05-25 21:44 666Tomcat Connector 可以将Tomcat ... -
Vitria BusinessWare: 事件与端口
2006-05-27 17:24 590Event BusinessWare是一个事件驱动的系统 ... -
WS-Security Interoperability Issues: WebSphere, JBoss, Axis and .Net
2006-08-31 22:46 795检验了一下WS-Security的互操作情况,涉及到 ...
相关推荐
SOAP是Web services的传输层协议,所有的SOAP消息均使用XML编码。XML engine是建立在Web service上的一种技术。在整个Web服务应用中,XML处于消息层的位置,而XML engine则针对Web服务应用中的XML进行操作,所以称做...
SOAP是Webservices的传输层协议,所有的SOAP消息均使用XML编码。XMLengine是建立在Webservice上的一种技术。在整个Web服务应用中,XML处于消息层的位置,而XMLengine则针对Web服务应用中的XML进行操作,所以称做消息...
24.Webservices:是描述一些操作(利用标准化的 XML 消息传递机制可以通过网络访问这些操作) 的接口。它是用标准、规范的 XML 概念描述的。 25.网站规划:是指在网站建设前对市场进行分析, 确定网站的目的和功能...
AIF,AIFF:音频互交换文件,Silicon Graphic and Macintosh应用程序的声音格式 ANI:Windows系统中的动画光标 ARC:LH ARC的压缩档案文件 ARJ:Robert Jung ARJ压缩包文件 ASD:Microsoft Word的自动保存文件;...
扩展安全对象模型 5.6. 国际化 6. 核心服务 6.1. The AuthenticationManager , ProviderManager 和 AuthenticationProvider s 6.1.1. DaoAuthenticationProvider 6.2. UserDetailsService 实现 6.2.1. ...
扩展安全对象模型 5.6. 国际化 6. 核心服务 6.1. The AuthenticationManager , ProviderManager 和AuthenticationProvider s 6.1.1. DaoAuthenticationProvider 6.2. UserDetailsService 实现 6.2.1....
属性交换 2.3.5. 添加你自己的filter 2.3.5.1. 设置自定义 AuthenticationEntryPoint 2.4. 保护方法 2.4.1. 元素 2.4.1.1. 使用protect-pointcut添加安全切点 2.5. 默认的AccessDecisionManager 2.5.1. ...