用 JAX-RPC 构建 RPC 服务和客户机(下)
2010-04-06 00:00:00 来源:WEB开发网Object[] params = new Object[] { bookTitle, keywordList };
然后,把这些参数传递给 invoke() 方法。请记住,不需要 指定要调用的服务的操作名(方法名);这已经通过 setOperationName() 方法完成了。下面需要获得结果并处理结果。
invoke() 方法返回一个 Object,但是这仅仅是实际返回类型的包装器。对于返回字符串的方法,这个对象包装一个 String;只需把返回的对象转换为正确的类型:
Object[] results = (Object[])call.invoke(new Object[] { keyword });
在这个示例中,服务上的方法返回一个 List。但是,SOAP 并不理解列表,所以它默认使用一种更泛化的类型:对象数组。这增加了程序员的负担,因为程序员必须亲自处理这些泛型对象并确保类型安全。这也是泛型和参数化目前在 Web 服务中用处不大的原因之一;在把信息从客户机传递给服务器的过程中,会丧失类型安全性。
把这行代码放到 search() 方法中,见清单 24:
清单 24. 执行调用并返回结果
public Object[] search(String keyword) throws IOException {
try {
if (service == null) {
service = new Service();
}
if (call == null) {
call = (Call)service.createCall();
}
if (serviceUrl == null) {
serviceUrl = new URL(SERVICE_URL);
}
call.setTargetEndpointAddress(serviceUrl);
// Select operation to call
call.setOperationName(new QName("http://soapinterop.org/",
"search"));
// Make call and get result
Object[] results = (Object[])call.invoke(new Object[] { keyword });
return results;
} catch (MalformedURLException e) {
throw new IOException("Error creating service URL at " + SERVICE_URL);
} catch (ServiceException e) {
throw new IOException("Error creating service call: " + e.getMessage());
}
}
- ››构建Windows 8风格应用23-App Bar概述及使用规范
- ››构建域名服务器(DNS)
- ››构建Android平台Google Map应用
- ››构建WinForm 通用速选(全选、反选、清空)组件
- ››构建Wordpress网站首选的5家国外主机
- ››构建高性能和高弹性 WebSphere eXtreme Scale 应用...
- ››构建前端UI组件的新思路
- ››构建 Android 开发环境
- ››JAXP 全面介绍,第 1 部分:XML 处理工具包使解析...
- ››JAXP 全部内容,第 2 部分:使用 Sun 的 XML 处理...
- ››构建 pureXML 和 JSON 应用程序,第 3 部分: 为 p...
- ››构建 ESB 中介来将分隔文件转换为服务调用
更多精彩
赞助商链接