soap平台实现

上传人:第*** 文档编号:51707568 上传时间:2018-08-16 格式:PPT 页数:48 大小:363KB
返回 下载 相关 举报
soap平台实现_第1页
第1页 / 共48页
soap平台实现_第2页
第2页 / 共48页
soap平台实现_第3页
第3页 / 共48页
soap平台实现_第4页
第4页 / 共48页
soap平台实现_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《soap平台实现》由会员分享,可在线阅读,更多相关《soap平台实现(48页珍藏版)》请在金锄头文库上搜索。

1、SOAP平台实现SOAP平台在SOA架构中的位置应用程序SOAP客户端1 )3) 4)2)5 )UDDI发布查找返回查找结果1)应用程序作为一个服务发布到SOAP平台上,供外部调用2)客户端根据查找到的WSDL,与SOAP平台进行绑定,并发送调用信息3)SOAP平台根据客户端发送的SOAP消息对应用程序进行调用4)应用程序将执行的结果返回给SOAP平台5)SOAP平台将调用的结果封装成SOAP消息返回给客户端。反射机制-SOAP平台的核心 Reflection 是 Java 程序开发语言的特征之 一,它允许运行中的 Java 程序对自身进 行检查,或者说“自审”,并能直接操作 类的内部属性。并

2、能够通过构造类中的 Method来动态的调用类中的方法。 反射机制java 核心反射接口提供了一个小的,安全 的API,支持在java虚拟机中对类和对象 进行反射。这些API主要用于: 构造构造实例和数组 访问和修改对象中的字段(属性) 执行对象里的方法 访问和修改数组中的元素 更多的资料反射机制class Application public void hello(String name) System.out.println(“hello “ + name + “!“); 要调用的类反射调用预备1)方法所属类的类型2)方法所属类的实例3)方法参数类型4)方法参数的值代码import jav

3、a.lang.reflect.Method; class Reflect public static void main(String args) try Class application=Class.forName(“Application“);/调用方法所属的类的类型 Object obj=application.newInstance();/构造类的实例 Class types=new Class1;/参数类型 Object arg=new Object1;/参数值 types0=String.class;/给参数类型赋值 arg0=“th“;/给参数值赋值 Method method

4、=application.getMethod(“hello“,types);/得到调用犯法的实例 method.invoke(obj,arg);/调用 catch(Exception e) System.out.println(“wrong when invoke!“); 反射机制反射调用代码SOAP平台实现我们设计的SOAP平台是按照SOAP1.1规范实现的,l 支持JAVA服务发布。l 支持多线程;l 该平台支持int, integer, long, short, decimal, float, double, boolean, string, date,dateTime, timeIns

5、tance, base64, hex和自定义的结构体类 型;l自动对soap规范中的类型与java类型进行转换;l支持soap数组;l自动完成soap消息序列化和反序列化;l支持带附件的SOAP消息的传送;l支持HTTP绑定;SOAP平台实现设计思路1.通过编写配置文件来发布服务 示例12. 通过中间类型系统来对JAVA类型与SOAP类型进行转换, 并通过配置文件进行对应 示例23.运用反射机制对服务中的方法进行调用SOAP平台实现主要内容 SOAP消息结构的表示 SOAP消息编码规则 体系结构和消息处理流程SOAP消息结构的表示根据规范,SOAP消息有三部分组成:Envelop Header

6、(可选) BodySOAP消息是基于XML的,所 以我们用了一个可以表示XML 元素的Entry类作为SOAP消息结构的父类。在其中完成各种 对XML实例的基本操作, SOAP消息中的各部分( Header,Body,Fault)对其进行 继承(但是,Envelop不对其进 行继承),那么在SOAP消息中各个部分中具体的操作都可以 直接复用父类中的方法,这样 那就使得对SOAP消息中各个部分的表示与操作变得非常的 简单。 Entry类 表示一个XML中的元素,并有对XML中的元素和属性进行相应的基 本操作。 成员属性:Entryparent-该节点的父亲节点 Stringname-该节点的名字

7、 HashMap attr-该节点的属性 HashMap namespaces -命名空间 booleanhasValue-该节点是否含有值 Stringvalue-该节点含的值 Listchildren-该节点的子节点类图DOM树结构,是一个反向关系环的结构。每个元素的属性,值 以及他的子元素都作为它的子节点。对元素进行操作实际上是一 个对表示它的DOM树进行遍历的过程。Entry类有别于DOM结构,它将一个元素的属性,值以及子元 素作为他的数据成员(请参看Entry的数据结构)。这样在对它进 行操作时,直接对他的数据成员进行操作,这样效率比前者要高 些。 EnvelopEnvelope类不

8、是Entry的子类,而 是包含了Entry的子类Header 和 Body。根据SOAP消息结构, Envelope也应该是一个XML结构 的,之所以没有将Envelope也作 为Entry的子类,是因为我们在处 理SOAP消息中,将SoapAction的内容也加入到了其中,并且在 对附件的处理中,也是将附件对 象放到其中,但是SoapAction和 附件对象都不是XML结构。其主 要作用是表示一个SOAP信封结构,对其中的信息进行处理,构 造返回的SOAP消息框架,发送附件的MIME结构。 成员属性:StringsoapEnvNS -全局命名空间 Headerheader-soap头部 Bo

9、dybody -soap主体部分 HashMap attr-属性 HashMap namespaces-命名空间 Listattachments-附件 String soapAction intcontent-附件类型Envelop中的成员body header以及body header中包含的其他元素都是Entry 类型, body header是与其对应的Envelop关联的,所以Envelop中的任何一 个元素都可以通过递归得到其对应的Envelop.public Envelope getEnvelope()return parent.getEnvelope();Envelop示例(请求

10、消息):-_=_OPENWEB-SOAP.-.42.21BOuN_DaRY5*y_ Content-Type: text/xml; charset=UTF-8 Content-Transfer-Encoding: 8bit Content-ID: -_=_ OPENWEB-SOAP.-.42.21BOuN_DaRY5*y_ Content-Type: text/xml Content-Transfer-Encoding: 8bit Content-ID: Content-Location: hjkhjkhkjhkyutggbgcvjbkhjfvjvhj -_=_ _OPENWEB-SOAP.-

11、.42.21BOuN_DaRY5*y_-语法验证:验证的主要内容:消息的完整性,即Envelop中必须包括 body元素;命名空间的支持,即Envelop的命名空间必须是 “http:/schemas.xmlsoap.org/soap/envelope/ ”public boolean check() if(body = null) return false; /若body为空,则错误 if(!body.check(true) return false; /调用body中的check方法进行验证 if(header != null) if(!header.check(true) return

12、false; /若header不为空,则调用header中的check方法进行验证 if(!supported() return false; /检验Envelop的命名空间是否正确。 return true; 在现阶段的版本中,body header中没有提供check方法,而是直接调 用的Entry中的check方法,这主要是为以后做进一步验证做准备。构造返回的空Envelop首先检查该Envelope对象的完整性,然后用本对象的全局命名空间的前缀和全局命名空间构造一个新的对象,然后将该元素的属性和命名空间赋给新元素,取出该元素的Body,将Body中的属性和命名空间赋给新元素的Body,

13、用新对象中的Body元素和该元素中的Body中请求调用的操作名加上字符串“Response“来构造新对象中Body中的操作元素。 返回Envelop序列化SOAP平台调用完成后,会将结果放到之前构造的空 的返回Envelop中,并对该Envelop进行序列化。首先检查是否包含附件,如果不包含则直接返回经过 序列化后的soap消息。如果包含,则先构造头部,这 里的头部不是soap消息中的头,而是包含了内容类型 等信息的头,然后将soap消息,以及附件按顺序将如 到结构中,并返回。 Envelop示例(返回消息)-_=_OPENWEB-SOAP.-.42.21BOuN_DaRY5*y_ Conte

14、nt-Type: text/xml; charset=UTF-8 Content-Transfer-Encoding: 8bit Content-ID: -_=_SpHeOn-JsOaP.-.42.21BOuN_DaRY5*y_ Content-Type: text/xml Content-Transfer-Encoding: 8bit Content-ID: Content-Location: hjkhjkhkjhkyutggbgcvjbkhjfvjvhj -_=OPENWEB-SOAP.-.42.21BOuN_DaRY5*y_-SOAP消息编码规则 SOAP编码风格是基于一个简单类型系统,

15、而这个系统应该是具有各种语言 的类型系统的公共特性。基于这一点,SOAP平台的编码规则是在两个级别 上操作:1.给出一个符号上一致化的类型系统描述模式,并由此模式构造出一 个XML语法层的表示方式;2:.提供一个类型系统的模式,用来构造XML实 例。所以我们提供了一个中间类型系统,用于完成上述的操作。其功能如下 :1.提供SOAP和JAVA当中的一个中间类型,用于SOAP类型与JAVA类型之 间的转化;2.控制数据的值;3.构造和解析包含数据的XML实例。 Java类型SOAP类型中间类型中间数据类型的设计 由于中间数据类型的功 能大体上是相同,所以 在设计中间数据类型的 时,采用了在一个抽象 类作为所有中间数据类 型类的父类( AbstractEncoding), 并在该抽象类中完成一 部分公共操作。子类继 承该抽象类的方法,并 在实现时覆盖父类的一 些方法。类型可以分为 两种:基本类型(这里 指的是jdk中的类型), 用户自定义类型。 中间数据类型不包含具体的值!中间类型主要操作取得类型中间类型中存储有该中间类型对应的java类型和soap类 型,可以分别通过调用getType() (取得对应java类型) ,getSoapType() (取得对应的soap类型 )类型对应表XML to java取值的过程是将表示参数值的XML反序列化的 过程,即将XML中的值取出来,将其

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号