移动客户端的Web服务

日期: 2008-08-06 作者:Daniel Rubio 来源:TechTarget中国 英文

随着Web服务在IT领域的普及,以同样的方式为每个可能的系统提供和处理XML类型的负载的方法已经不新鲜了,更大的挑战来自于移动应用的领域。下面,我们将分析Java ME(Java Micro Edition) 如何处理Web服务的问题。   移动客户端是一组特殊的设备,包括个人数字助手(PDA)和移动电话。尽管它们总在不停地访问重要数据,但却受到内存、显示和高延迟网络的不利影响。

看看早期这种设备使用的技术,就能知道为什么在这个领域需要特别考虑Web服务了。   时至今日,HTML依然在标记非常多的互联网上的网页,但却不能没大多数移动设备使用。在这个领域,需要使用WML和HDML来处理PDA和移……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

随着Web服务在IT领域的普及,以同样的方式为每个可能的系统提供和处理XML类型的负载的方法已经不新鲜了,更大的挑战来自于移动应用的领域。下面,我们将分析Java ME(Java Micro Edition) 如何处理Web服务的问题。

  移动客户端是一组特殊的设备,包括个人数字助手(PDA)和移动电话。尽管它们总在不停地访问重要数据,但却受到内存、显示和高延迟网络的不利影响。看看早期这种设备使用的技术,就能知道为什么在这个领域需要特别考虑Web服务了。

  时至今日,HTML依然在标记非常多的互联网上的网页,但却不能没大多数移动设备使用。在这个领域,需要使用WML和HDML来处理PDA和移动电话的很多问题。因此,这说明很多互联网上的技术不见得适用于移动环境。

  Java ME Web services /JSR-172解决了移动应用中面临的两个问题:从Java移动设备中访问SOAP/XML Web服务,以及处理这种服务发送的XML消息。在这种情况下,JSR-172被专门集中在客户端处理Web服务,而不能从移动设备发布服务。

  如果你有从Java客户端使用Web服务的经验,那么你就应该能很容易地使用Java ME的Web服务。因为XML处理和Web服务访问都是基于JAXP和JAX-RPC的子集API的,而它们在完全Java的环境中执行着同样的任务。

  这种JAXP和JAX-RPC的子集API的特别之处在于它只有35kb,这很适合于Connected Limited Device Configuration (CLDC)中的Java ME。尽管Java ME和标准Java 的JAX-RPC几乎同样的大小,但在此之上的JAXP插入类却非常不同。因为在标准Java中具有访问全套XML处理的功能,而由于平台大小的限制,这些功能对移动应用过多了。

  让我们来讨论一下功能方面,对比Java ME的JAX-RPC和标准Java实现中的JAX-RPC。前者缺少对以下功能的支持,但这些功能在后者中是具备的:

  ·不支持服务终端,即设备不能是Web服务提供者。
  ·不提供服务发现(UDDI)
  ·不支持附件的SOAP消息
  ·不支持SOAP消息处理器

  正如前面所说的,Java ME的JAXP实现与标准Java在处理XML时不同的是:

  ·不支持文档对象模型(DOM)
  ·不支持可扩展样式表语言转换(XSLT)

  现在,我们来看看Java ME的JAX-RPC API,看它如何调用互联网上的一个Web服务的。要记住,这只是遵循Mobile Information Device Profile (midP)规范的Java ME应用程序的一部分。和其它软件应用一样,一个Java ME应用程序必须包括业务逻辑类、用户接口和应用状态管理以及其它代码。这些问题超出了本文的范围,因为它们与Java ME相关。因此,你可以参考Java ME’s site 或 Sun Wireless Toolkit ,它是开发Java ME应用的一种环境。

  首先,创建一个Java ME Web服务,从服务提供方通过自己WSDL合约生成一个Java stub。这一步与通过WSDL合约获得某个语言特定的接口来发布特殊服务的标准Java Web服务很类似。但是,在Java ME中,stub需要用JSR-172来构建,而Sun Wireless Toolkit提供了这样一种工具。

  一旦有了stub,就需要构建一个具体的类,表单1.1显示了一个天气预报应用的Java ME Web服务的类。

  Listing 1.1 Java ME midlet/class using web services.
  import javax.microedition.midlet.midlet;
  import javax.microedition.lcdui.Display;
  import javax.microedition.lcdui.Form;

  import java.rmi.RemoteException;

  // Define web service url and input data
  String serviceURL = "http://www.acmeweather.com/weatherservice";
  int zipCode = 91912;

  // Generate WeatherService stub
  WeatherService_Stub service = new WeatherService_Stub();

  // Configure stub
  service._setProperty(Stub.ENDPOINT_ADDRESS_PROPERTY, serviceURL);
  service._setProperty(Stub.SESSION_MAINTAIN_PROPERTY, new Boolean(true));

  /** More code - cut out for brevity */

  try {
    // Invoke the WeatherService method getWeatherByZip(zipCode)
    // The web service method takes and integer representing
    // a city zip code
    WeatherOnTheMove weather = service.getWeatherByZip(zipCode);

    // create a Form to display the weather.
    // Call getCityNameByZip and getWeekendWeather methods
    javax.microedition.lcdui.Form form =
        new Form(weather.getCityNameByZip(zipCode));
    form.append(wrap(weather.getWeekendWeather(zipCode)));

  /** More code - cut out for brevity */

    display.setCurrent(form);
  } catch (RemoteException e) {
     // Handle network level exceptions
  } catch (Exception e) {
     // Handle standard exceptions.

  }
  //End Listing
 
  注意,我们使用了一些javax.microedition类,它们是Java ME核心的一部分,带有java.rmi.RemoteException的异常。使用JAX-RPC的代码在stub中,被Web服务 WSDL合约创建。所有这些工作都在开发人员的工作台上,从获得WSDL合约一直到打包应用程序。一旦移动Web服务在工作台模拟器上被彻底调式和测试后,只在最后一步才真正涉及到移动设备。

  最后,总结我们对在很多组织中使用Web服务的Java ME功能的观点。有了它,你现在可以提供给你的用户同样的Web服务数据,而不用管他们是在PC机旁还是在使用移动电话或者PDA了。

相关推荐