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

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

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

    所生成的 WSDL 定义中的 XML 数据类型定义如清单 8 所示。

清单 8. 与清单 7 对应的 WSDL 定义


 <wsdl:types>
  <schema targetNamespace="http://ws.test.ibm.com" 
    xmlns="http://www.w3.org/2001/XMLSchema" 
  xmlns:impl="http://ws.test.ibm.com" xmlns:intf="http://ws.test.ibm.com" 
  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <element name="addTwoResponse">
     <complexType>
      <sequence>
       <element name="addTwoReturn" type="xsd:float"/>
      </sequence>
     </complexType>
    </element>
    <element name="addTwo">
     <complexType>
      <sequence>
       <element name="a" type="xsd:float"/>
       <element name="b" type="xsd:float"/>
       <element name="b" type="xsd:float"/>
      </sequence>
     </complexType>
    </element>
  </schema>
  </wsdl:types>
      


    对于针对 CLDC 1.0 的 Web 服务客户端,所生成的存根如清单 9 所示。

清单 9. 为 CLDC 1.0 生成的客户端存根

 public interface TaskWs extends java.rmi.Remote {
    public java.lang.String addTwo(java.lang.String _a, java.lang.String _b)
            throws java.rmi.RemoteException, javax.xml.rpc.JAXRPCException;
}
      


    所以,当调用 CLDC 1.0 中的 Web 服务时,您必须使用 addTwo() 方法提供两个 String 参数,而对于针对平台 CLDC 1.1 的 Web 服务客户端,所生成的服务接口与清单 10 中所描述的类似:

清单 10. 为 CLDC 1.1 生成的客户端存根

public interface TaskWs extends java.rmi.Remote {
    public float addTwo(float _a, float _b) 
    throws java.rmi.RemoteException, javax.xml.rpc.JAXRPCException;
}
      

    这将 xsd:float 映射到所生成的客户端存根中的 float 类型。看到 CLDC 1.0 和 CLDC 1.1 之间的不同之处了吗?

     在为移动设备开发 Web 服务时,请注意 float 和 double 类型,因为 CLDC 1.0 虚拟机实现无法加载为 CLDC 1.1 生成的存根(使用到 float 和 double 的本机映射)。同时针对 CLDC 1.0 和 CLDC 1.1 的 Java 2 Platform Micro Edition (J2ME) 应用程序的开发人员应该使用到 java.lang.String 的缺省映射,以获得最好可重用性。

在处理输入和输出参数时注意可能出现的问题

    JSR-172 指定了以副本的形式传送并以副本的形式创建返回值的所有参数。但是,当处理数据集合时,零数组 (返回零)和空数组 (返回其本身)需要密切关注。

我的建议是尽可能地避免使用空数组。当处理移动 Web 服务时,空数组可能是一个问题。

假定您需要返回任务对象数组。原始代码如清单 11 所示。

清单 11. 一个简单的值对象

public class SimpleTask {
    /**
     * The name of the task
     */
    private String name;
    /**
     * The default constructor
     *
     */
    public SimpleTask() {
    }
    /**
     * @return Returns the name of the task.
     */
    public String getName() {
        return name;
    }
    /**
     * @param name
     *            The name to set.
     */
    public void setName(String name) {
        this.name = name;
    }
}
      


Web 服务实现如清单 12 所示。

清单 12. 返回值对象的数组的方法

1  public SimpleTask[] getSimpleTasks(){
2       SimpleTask[] tasks = null;
3       /*
4        * Your code dealing with DB goes here
5        * ....
6        * tasks = ...
7        */
8       return tasks;
9 }
      


 



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