这个数据集的XML编码分为两部分。一部分是规划,描述了XML编码的结构;另一部分是数据集的实体。本文将略去规划部分,假定规划是已知的,这里仅仅着重考虑数据编码本身。在一些更复杂的应用中,通过规划来做一些其他的事情通常是很有用的。
通过灵活地反复使用以下格式的元素,就可以将创建好的表中的数据编码成非常简单的格式:
<ID></ID>
<Name></Name>
<Telephone></Telephone>
</PhoneBook>
如果我们已经知道了XML的形式,就可以编写一个能获取并使用这些数据的WebLogic Workshop Web服务。
用XML映像(XML Map)提取数据
通过WebLogic Workshop的XML映射技术,我们可以提取这些数据,并将其存入到用于表示电话本实体的Java对象中。下面的代码将完成这项工作:
{
public int id;
public String name;
public String phoneNumber;
}
为了对引入的XML进行解码,我们将用到一个XML映像。以下XML映像可以作为服务控件的返回映像,这个服务控件是用于调用可返回数据集的.NET Web 服务的。
* @jws:return-xml xml-map::
* <getDataSetResponse xmlns=http://tempuri.org/>
* <getDataSetResult>
* <diffgr:diffgram
* xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
* <MyDataSet xmlns="">
* <PhoneBook xm:multiple="entry in return">
* <ID>{entry.id}</ID>
* <Name>{entry.name}</Name>
* <Telephone>{entry.telephone}</Telephone>
* </PhoneBook>
* </MyDataSet>
* </diffgr:diffgram>
* </getDataSetResult>
* </getDataSetResponse>
* ::
*/
public PhoneBookEntry[] getDataSet();
该映像需添加到.NET Web服务对应的CTRL文件中的getDataSet方法中。这个映像看起来可能有些复杂,但这的的确确就是要演化为.NET Web服务返回的用于获取电话本条目部分的XML。接着用一个xm:multiple属性将每个电话本条目的数据绑定到由映像-增强(map-enhanced)getDataSet返回的一个数组的元素上。
你可能已经注意到,这个映像建议的XML形式与之前我展示过的那个映像略有出入。不幸的是,WebLogic Workshop收到的SOAP消息看上去与.NET的Web界面所显示的XML形式有所不同。你可以通过在WebLogic Workshop上的Web服务中调用.NET的Web服务方法来找到WebLogic Workshop所收到的消息,并使用测试视图查看.NET返回的XML形式。
结论
互操作性在Web服务中非常重要,而通过WebLogic Workshop可以非常容易地实现对其他Web服务的互操作。在本文中我们讨论了为实现对.NET的互操作需要做那些工作,实际上,这些原理同样适用于其他任何可以产生有效WSDL的Web服务产品。
