📄 chapter30.htm
字号:
A.black:hover { COLOR: #000000; TEXT-DECORATION: underline}.navigater { FONT-SIZE: 12px; COLOR: #333333; LINE-HEIGHT: 19px; TEXT-DECORATION: none}A.navigater:hover { COLOR: #cc0000}.g1 { FONT-SIZE: 14px}.g2 { PADDING-LEFT: 21px; PADDING-TOP: 5px}.g3 { FONT-WEIGHT: bold; COLOR: #ab6503}.g4 { COLOR: #ff0000}.img { BORDER-RIGHT: #800000 1px solid; BORDER-TOP: #800000 1px solid; BORDER-LEFT: #800000 1px solid; BORDER-BOTTOM: #800000 1px solid}.img1 { BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid}.f14 { FONT-SIZE: 14px; LINE-HEIGHT: 26px}.f20 { FONT-WEIGHT: bold; FONT-SIZE: 20px}.top_red { COLOR: #d70709; TEXT-DECORATION: none}.center01 { COLOR: #000000; LINE-HEIGHT: 20px}.center01 TD { COLOR: #000000; LINE-HEIGHT: 20px}.center01 A:link { COLOR: #000000; TEXT-DECORATION: none}.center01 A:visited { COLOR: #000000; TEXT-DECORATION: none}.center01 A:hover { COLOR: #2b7128; TEXT-DECORATION: underline}.center02 { COLOR: #194e00; LINE-HEIGHT: 20px}.center02 TD { COLOR: #194e00; LINE-HEIGHT: 20px}.center02 A:link { COLOR: #194e00; TEXT-DECORATION: none}.center02 A:visited { COLOR: #194e00; TEXT-DECORATION: none}.center02 A:hover { COLOR: #194e00; TEXT-DECORATION: underline}--></style><TABLE width=760 border=0 align=center cellPadding=0 cellSpacing=0 bgcolor="#F3F3F3" valign="top"> <tr class="center01"> <td width="488" style="padding-left:10px;padding-top:10px"> <a href="index.php">连载</a> > <a href="slist.php?class1=6">程序设计</a> > <a href="slist.php?class2=7">Java</a> > <a href="serialize.php?id=387">Java网络编程专辑</a> </td> <td width="280" style="padding-left:10px;padding-top:10px"> <div align="center"> <font color=#0000FF><a href='chapter.php?id=387&volume=2&chapter=16'>上一页</a></font> <font color=#0000FF><a href="serialize.php?id=387">回书目</a></font> <font color=#0000FF><a href='chapter.php?id=387&volume=2&chapter=18'>下一页</a></font> </div> </td> </tr> <tr class="center01"> <td colspan="2" align="center" style="padding-left:10px;padding-top:10px"> </td> </tr> <TBODY> <TR> <TD colspan="2" align=middle> <BR> <div style="FONT-SIZE: 18pt; COLOR: #990000; FONT-FAMILY: 楷体_GB2312" align=center><B>网络协议</b></div><br><div style="COLOR: #990000; font-family: ; font-size: 18px;宋体;" align=center>SOAP协议初级指南(6)</div> <DIV style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; FONT-SIZE: 10.5pt; COLOR: black; LINE-HEIGHT: 180%" align=left> <br> <P>与存取元素相关的另一个问题是由于类型关系引起的可代换性。由于前面的adjustment类不是一个final类型的类,transfer对象的from和to域实际引用继承类型的实例是可能的。为了支持这种类型兼容的替换,SOAP使用一个名域限定的类型属性的XML Schema约定。这种类型属性的值是一个对元素具体的类型的限制的名字。考虑下面的adjustment扩展类:<BR><BR>package com.bofsoap.IBank;<BR>public class auditedadjustment extends adjustment {<BR>public int auditlevel;<BR>}<BR><BR> 给出下面Java语言:<BR><BR>transfer xfer = new transfer();<BR>xfer.from = new auditedadjustment();<BR>xfer.from.account = 3514; xfer.from.amount = -100;<BR>xfer.from.auditlevel = 3;<BR>xfer.to = new adjustment();<BR>xfer.to.account = 3518; xfer.from.amount = 100;<BR><BR> 在SOAP中transfer对象的序列化形式如下所示:<BR><BR><t:transfer<BR>xmlns:xsd=‘http://www.w3.org/1999/XMLSchema‘<BR>xmlns:t=‘urn:develop-com:java:com.bofsoap.IBank‘<BR>><BR><from xsd:type=‘t:auditedadjustment‘ ><BR><account>3514</account><BR><amount>-100.0</amount><BR><auditlevel>3</auditlevel ><BR></from><BR><to><BR><account>3518</account><BR><amount>100.0</amount><BR></to><BR></t:transfer><BR><BR> 在这里xsd:type属性引用一个名域限定的类型名,它能被反序列化程序用于实例化对象的正确类型。因为to存取元素引用到一个被预料的类型的实例(而不是一个可代替的继承类型),xsd:type属性是不需要的。<BR><BR> 刚才的transfer类设法回避了一个关键问题。如果正被序列化的transfer对象用下面这种方式初始化将会发生什么情况:<BR><BR>transfer xfer = new transfer();<BR>xfer.from = new adjustment();<BR>xfer.from.account = 3514; xfer.from.amount = -100;<BR>xfer.to = xfer.from;<BR><BR> 基于以前的议论,在SOAP 中transfer对象的序列化形式如下所示:<BR><BR><t:transfer<BR>xmlns:t=‘urn:develop-com:java:com.bofsoap.IBank‘><BR><from><BR><account>3514</account><BR><amount>-100.0</amount><BR></from><BR><to><BR><account>3514</account><BR><amount>-100.0</amount><BR></to><BR></t:transfer><BR><BR> 这个表达有两个问题。首先最容易理解的问题是同样的信息被发送了两次,这导致了一个比实际所需要消息的更大的消息。一个更微妙的但是更重要的问题是由于反序列化程序不能分辨两个带有同样值的adjustment对象与在两个地方被引用的一个单一的adjustment对象的区别,两个存取元素间的身份关系就被丢失。如果这个消息接收者已经在结果对象上执行了下面的测试,(xfer.to == xfer.from)将不会返回true。<BR><BR>void processTransfer(transfer xfer) {<BR>if (xfer.to == xfer.from)<BR>handleDoubleAdjustment(xfer.to);<BR>else <BR>handleAdjustments(xfer.to, xfer.from);<BR>}<BR><BR> (xfer.to.equals(xfer.from))可能返回true的事实只是比较了两个存取元素的值而不是它们身份。<BR>为了支持必须保持身份关系的类型的序列化,SOAP支持多引用存取元素。目前我们接触到的存取元素是单引用存取元素,也就是说,元素值是嵌入在存取元素下面的,而且其它存取元素被允许引用那个值(这很类似于在NDR中的[unique]的概念)。多引用存取元素总是被编码为只包含已知的soap:href属性的空元素。soap:href属性总是包含一个代码片段标识符,它对应于存取元素引用到的实例。如果to和from存取元素已经被编码为多引用存取元素,序列化的transfer对象如下所示:<BR><BR><t:transfer<BR>xmlns:t=‘urn:develop-com:java:com.bofsoap.IBank‘><BR><from soap:href=‘#id1‘ /><BR><to soap:href=‘#id1‘ /><BR></t:transfer><BR><BR> 这个编码假设与adjustment类兼容的一个类型的实例已经在envelope中的其它地方被序列化,而且这个实例已经被用soap:id属性标记,如下所示:<BR><BR><t:adjustment soap:id=‘id1‘<BR>xmlns:t=‘urn:develop-com:java:com.bofsoap.IBank‘><BR><account>3514</account><BR><amount>-100.0</amount><BR></t:adjustment><BR><BR> 对多引用存取元素,把代码段的标识符(例如#id1)分解到正确的实例是反序列化程序的工作。<BR><BR> 前面的讨论解释了多引用存取元素怎样与它的目标实例相关联。下面要讨论的是目标实例在哪里被序列化。这就关系到独立元素和包的概念。</P><br><br> </DIV> </TD> </TR> <TR> <TD class=center01> <div align="center">来源:天极网 作者:<div> </TD> <TD width="280" class=center01> <div align="center"> <font color=#0000FF><a href='chapter.php?id=387&volume=2&chapter=16'>上一页</a></font> <font color=#0000FF><a href="serialize.php?id=387">回书目</a></font> <font color=#0000FF><a href='chapter.php?id=387&volume=2&chapter=18'>下一页</a></font> </div> </TD> </TR> </TBODY></TABLE><table><tr><td width="760"> <table width="760" height="10" border="0" cellpadding="0" cellspacing="0"> <tr> <td></td> </tr> </table> <!------------ 评论 ----------------> <table width="760" border="0" cellpadding="0" cellspacing="0"> <tr> <td><iframe width="100%" id=vs frameborder=0 scrolling=no src="comment_list1.php?id=387"></iframe> </td> </tr> </table><br><script language=javascript>function CheckNetwordForm(theForm){ if("" == theForm.content.value) { alert("写两句吧~~"); theForm.content.focus(); return false; } var index; for(index=0;index<theForm.content.value.length;index++) { if(" " != theForm.content.value.charAt(index)) break; } if(index == theForm.content.value.length) { alert("写两句吧~~"); theForm.content.focus(); return false; } if (theForm.content.value.length>100){ alert("评论字数不能超过100哦"); theForm.content.focus(); return false; } return true;}</script> <!------------------ 评论 ---------------> <form name=netword method=post action="insertnetword.php" onsubmit="javascript: return CheckNetwordForm(this);"> <table width="760" border="0" cellpadding="0" cellspacing="0"> <tr> <td height="25" class="text6"> 给此书打分:<a name="1"></a> <select name="score"> <option value=5 selected>非常好</option> <option value=4>还凑合</option> <option value=3>一般吧</option> <option value=2>不太行</option> <option value=1>太差了</option> </select> 用户名: <input name="id" value=387 type="hidden" id="id"> <input name="backurl" value=/book/chapter.php?id=387&volume=2&chapter=17 type="hidden"> <input name="username" type="text" id="username" size="20" maxlength="20"> <font color="#666666">*评论字数请控制在一百字以内</font> </td> </tr> </table> <br> <textarea name="content" cols="80" rows="4" wrap="OFF" id="description"></textarea> <input type="submit" name="Submit" value="提交"> </form> </td> </tr></table></td></tr></table> <TABLE cellSpacing=0 cellPadding=0 width=760 border=0> <TBODY> <TR> <TD width="1003" height=9 background=images/t_bj01.gif><IMG height=1 src="images/ccc.gif" width=1></TD> </TR> </TBODY></TABLE><TABLE cellSpacing=0 cellPadding=0 width=760 bgColor=#ffffff border=0> <TBODY> <TR> <TD><HR width=760 noShade SIZE=1> </TD> </TR> <TR> <TD align=middle><A class=black href="http://www.chinaren.com/" target=_blank>ChinaRen</A> - <A class=black href="http://big5.www.sohu.com/" target=_blank>繁体版</A> - <A class=black href="http://hr.sohu.com/hrm.html" target=_blank>搜狐招聘</A> - <A class=black href="http://add.sohu.com/" target=_blank>网站登录</A> - <A class=black href="http://help.sohu.com/" target=_blank>帮助中心</A> - <A class=black href="http://book.news.sohu.com/onClick=this.style.behavior='url(#default#homepage)';this.setHomePage('http://www.sohu.com');return" target=_blank false;>设置首页</A> - <A class=black href="http://adinfo.sohu.com/" target=_blank>广告服务</A> - <A class=black href="http://www.sohu.com/about/lianxi.htm" target=_blank>联系方式</A> - <A class=black href="http://www.sohu.com/about/privacy.html" target=_blank>保护隐私权</A> - <A class=black href="http://www.sohu.com/about/" target=_blank>About SOHU</A> - <A class=black href="http://www.sohu.com/about/" target=_blank>公司介绍</A><BR> <SPAN class=eng>Copyright © 2004 Sohu.com Inc. All rights reserved. 搜狐公司 版权所有</SPAN> </TD> </TR> </TBODY></TABLE></center></body></html><script language="JavaScript" src="http://nielsen.js.sohu.com/nnselect.js"></script><noscript><img src='http://ping.nnselect.com/ping.gif?c=119' height='1' width='1'></noscript>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -