随着Web服务在IT领域的普及,以同样的方式为每个可能的系统提供和处理XML类型的负载的方法已经不新鲜了,更大的挑战来自于移动应用的领域。下面,我们将分析Java ME(Java Micro Edition) 如何处理Web服务的问题。 移动客户端是一组特殊的设备,包括个人数字助手(PDA)和移动电话。尽管它们总在不停地访问重要数据,但却受到内存、显示和高延迟网络的不利影响。
看看早期这种设备使用的技术,就能知道为什么在这个领域需要特别考虑Web服务了。 时至今日,HTML依然在标记非常多的互联网上的网页,但却不能没大多数移动设备使用。在这个领域,需要使用WML和HDML来处理PDA和移……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属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了。
作者
相关推荐
-
SAP收购CallidusCloud 与Salesforce竞争
一直被称为后台办公巨头的SAP现在似乎也想在前台办公大展拳脚。 最新的迹象是SAP收购CallidusClou […]
-
API设计如龙生九子 各不相同
IT咨询管理公司CA Technologies对API产业做了个问卷调查,问卷内容涉及API设计风格以及管理部署的新动向。调查结果表明,JSON与XML可谓两分天下。
-
从头开始实现领域驱动设计
领域描述业务;它是驱动企业的概念和逻辑的集合。如果遵循领域驱动设计(DDD)这一本质,那么领域就是应用程序中最重要的组成部分。
-
走出思维定式 数据库/大型机现代化不再是问题
升级和改变组织的主要利益驱动应用的前景,正处于一个压倒性的位置,所以组织将要面临一系列的改变。