独家!" name="description" />

CTOCIO IT专家网

天极传媒 比特网 | 天极网 | IT专家网 | IT商网 | 52PK游戏网 | 手机天极 | IT分众 |
IT专家网搜索

您现在的位置: IT专家网 > Web服务子站 > 技巧

移动客户端的Web服务-Java ME/JSR-172 独家!

作者: Daniel Rubio,  出处:TechTarget, 责任编辑: 叶江, 
2006-06-01 14:56
  随着Web服务在IT领域的普及,以同样的方式为每个可能的系统提供和处理XML类型的负载的方法已经不新鲜了,更大的挑战来自于移动应用的领域。下面,我们将分析Java ME(Java Micro Edition) 如何处理Web服务的问题。

  随着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 = "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了。

网友评论

笔名 
请您注意:遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。    IT专家网友拥有管理笔名和留言的一切权利。
  • 周排行榜
  • 月排行榜

邮件订阅

       
天极服务 | 关于我们 | 网站律师 | 加入我们 | 联系我们 | 广告业务 | 友情链接 | 我要挑错
All Rights Reserved, Copyright 2004-2008, Ctocio.com.cn
渝ICP证B2-20030003号 如有意见请与我们联系 powered by 天极内容管理平台CMS4i