分享
 
 
 

Sun ONE Application Server 开发者指南(19)

王朝java/jsp·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

SOAP消息

本节向你介绍SOAP消息的结构和组成部分、如何访问它们、以及如何处理SOAP消息。本节讲述以下主题:

SOAP消息的组成部分

访问消息的元素

SOAP消息的组成部分

SOAP消息是一个包括SOAPEnvelope、一个可选的SOAPHeader、以及SOAPBody的XML文件。SOAP消息头包含了使消息在到达最终目的地之前,能够被路由到一个或多个中间节点的信息。

SOAP消息的组成部分

这个图展示了SOAP消息的结构和组成部分。不同对象代表了SOAP消息的每一个部分。

SOAPMessage对象包括:

一个SOAPPart对象,其中包括

一个SOAPEnvelope对象,其中包括

一个空的SOAPHeader对象 – 可选,包括它是为了方便,因为大多数消息都要用到它。

一个空的SOAPBody对象 -可以容纳消息的内容,还能容纳包含了状态信息或者消息故障明细的错误消息。

AttachmentPart可能容纳普通文本或者图像文件。

SOAPEnvelope是代表消息的XML文件的根元素。它为消息如何处理、由谁处理定义了框架。XML内容从SOAPEnvelope开始。

SOAPHeader是添加特性到SOAP消息的基本机制。它可以容纳任意数目的扩展了基础协议的子元素。例如,header子元素可能会定义认证信息、事务信息、本地信息、等等。处理消息的软件可以在没有事先约定的情况下,使用这个机制定义谁应该处理某个特性,以及该特性是强制的还是可选的。

body是发给消息最终接收者的强制信息的容器。SOAP消息还可以容纳一个附件,它不一定非得是XML文件。

访问消息的元素

当创建消息体或附件的时候,以及处理消息的时候,你需要访问消息的组成部分。

SOAPMessage对象含有一个SOAPPart对象。通过message对象可以得到它。

SOAPPart soapPart = message.getSOAPPart();

然后你可以利用SOAPPart获得它所含有的SOAPEnvelope对象。

SOAPEnvelope envelope = soapPart.getEnvelope();

现在你可以利用envelope获得它的空SOAPHeader和SOAPBody对象。

SOAPHeader header = envelope.getHeader();

SOAPBody body = envelope.getBody();

SOAPBody对象最初是空的。

命名空间

XML命名空间是一种限定元素和属性名称的方法,目的是消除它们与同一文件中其他名称之间产生的歧义。一个名确的XML命名空间声明采用如下格式:

<prefix:myElement

xmlns:prefix ="URI">

声明定义prefix作为一个特定URI的别名。在myElement元素内,你可以对任何元素或属性使用前缀,从而指定元素或属性属于URI指定的命名空间。下面的代码是命名空间声明的一个例子。

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">

该定义定义了SOAP_ENV作为命名空间http://schemas.xmlsoap.org/soap/envelope/

的别名。

定义了别名之后,可以使用它作为Envelope元素中任何属性或元素的前缀。

预定义的SOAP命名空间

SOAPEnvelope,SOAP消息的根元素,拥有下面的命名空间标识http://schemas.xmlsoap.org/soap/envelope

SOAP serialization,定义SOAP序列化规则的URI,拥有下面的命名空间标识"http://schemas.xmlsoap.org/soap/encoding".。

当使用SAAJ或JAXM构造或者消费消息的时候,你有责任保证正确设定或处理命名空间,并且丢弃含有错误命名空间的消息。

创建SOAP消息的时候使用命名空间

当创建SOAP消息的body或header元素的时候,你必须使用命名空间为元素指定一个完整的名称。通过调用方法SOAPEnvelope.createName可以获得一个名称。

调用该方法时,可以传递一个本地名称作为参数,或者可以指定本地名称、前缀、以及URI。例如,下面的命令行定义了一个名为bodyName的Name对象。

Name bodyName = MyEnvelope.createName("TradePrice", "GetLTP", "http://foo.eztrade.com");

这和下面的命名空间声明作用相同。

<GetLTP:TradePrice xmlns:GetLTP= "http://foo.eztrade.com">

下面的代码演示了如何创建一个名称并把它和SOAPBody元素绑定。注意createName方法的使用和位置。

SoapBody body = envelope.getBody();//get body from envelope

Name bodyName = envelope.createName("TradePrice", "GetLTP", "http://foo.eztrade.com");

SOAPBodyElement gltp = body.addBodyElement(bodyName);

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有