设计移动Web服务需要考虑的三个设计层次

来源: 作者: 2007-12-14 出处:pcdog.com

.net  j2me  java  linux  soa  
上一页 1 2 3 4 5 6 

    当生成 Web 服务存根和使用生成的存根测试 Web 服务时,本例中的每一个部分都将正常工作。但是,因为在结束一个阶段之前您需要使用 Jtest 进行完整的代码检查,所以当您对代码片段运行 Jtest 时,您将看到一条建议:“Return zero-length arrays instead of null”。在犹豫片刻之后后,您将赞同 Jtest 的建议。如果您返回零数组,该代码的客户端必须编写额外的代码来检查返回值是否为零(如清单 13 所示)。

清单13. 用于调用 Web 服务的客户端代码片段


   SimpleTask[] tasks = service.getSimpleTasks();
       if(tasks != null){
           int length = tasks.length;
           //do something here
       }
      


    当您将 SimpleTask[] tasks = null;(清单 12 中的第 2 行)修改为 SimpleTask[] tasks = new SimpleTasks[0]; 时,您只需将清单 13 编写为:

   SimpleTask[] tasks = service.getSimpleTasks();
           int length = tasks.length;
      

    在修改之后,您会认为代码逻辑没有更改,并再次运行客户端来调用 Web 服务,但是现在却引发了异常。到目前为止,您已经根据 Jtest 的建议做了许多小的修补——您忘记修改了什么——这可能导致需要花额外的时间来努力找到发生错误的原因。这个过程真的漫长而乏味。

    那么,问题究竟出在什么地方呢?一般来说,对于零对象数组(如 SimpleTask),返回的 SOAP 消息如清单 14 所示。

清单 14. 返回零数组时的 SOAP 消息

<soapenv:Body>
<p147:getSimpleTasksResponse xmlns:p147="http://ws.test.ibm.com">
  <getSimpleTasksReturn xsi:nil="true" />
</p147:getSimpleTasksResponse>
</soapenv:Body>
      

对于空数组(如 SimpleTask[] tasks = new SimpleTask[0]),SOAP 消息如清单 15 所示。

清单 15. 返回空数组时的 SOAP 消息
<soapenv:Body>
<p147:getSimpleTasksResponse xmlns:p147="http://ws.test.ibm.com">
  <getSimpleTasksReturn />
 </p147:getSimpleTasksResponse>
 </soapenv:Body>
      

    其不同之处在于 <getSimpleTasksReturn/><getSimpleTasksReturn xsi:nil = true> 之间。图 2 说明了空数组参数大部分时间是无效的。对于自定义的数据类型(包括另一个自定类型的数组),不要将类变量初始化为空数组——相反,要将其初始化为零数组,尽管所生成的空数组和零数组的 WSDL 定义是相同的。

图 2. 根据 JSR-172 编码零数组参数和空数组参数
设计移动Web服务需要考虑的三个设计层次(图二)

设计移动Web服务需要考虑的三个设计层次(图三)
设计移动Web服务需要考虑的三个设计层次(图四)
设计移动Web服务需要考虑的三个设计层次(图四)

结束语

在处理移动 Web 服务时,您需要更加谨慎,因为移动 Web 服务规范只支持部分 API。如果您计划开发移动 Web 服务,则当您处理值类型和集合类型时,我向您介绍了一些窍门。此外,我还提供了以下信息:

参考资料

学习


获得产品和技术

关于作者

设计移动Web服务需要考虑的三个设计层次(图四)

设计移动Web服务需要考虑的三个设计层次(图五)

设计移动Web服务需要考虑的三个设计层次(图四)

Shu Fang Rui 毕业于中国上海交通大学。她对无线技术和 Web 服务非常感兴趣。除了旅行之外,她还喜欢从



上一页 1 2 3 4 5 6 
上一篇:怎么样配置Weblogic的数据源
下一篇:J2ME网络编程以及网络游戏的实现