快速业务通道

用JAX-RPC构建RPC服务和客户机:使用Java API构建基于RPC的Web服务(二) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
序把参数放在这个数组中。对于 search() 方法,只有一个 参数(关键字),所以像下面这样创建对象数组:

Object[] params = new Object[] { keyword };

如果要传递多个参数,比如在 addBook() 方法中,就要使用下面这样的代码:

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());   } }

用JAX-RPC构建RPC服务和客户机:使用Java API构建基于RPC的Web服务(二)(6)

时间:2011-08-02 IBM Brett McLaughlin

与设置端点和操作的代码一样,这里的代码也很简单,但是它会完成许多操作:

Call 实例查找请求要发送到的 URL 端点。

Call 实例查找要调用的操作。

使用目标端点和操作名以及您提供的参数,构造一个新的 SOAP 请求。这个请求采用 XML 格式。

把 XML 格式的 SOAP 请求发送给 Web 服务。

Web 服务用一个 XML 格式的响应来回复这个请求。

把生成的 XML 转换为 Java 对象(在这里是一个对象数组)并返回给程序。

当然,程序员只需调用 invoke() 方法即可。

现在,程序完成了,重新编译它并确保 Web 服务和 servlet 引擎正在运行。然后,运行客户机程序 ;应该会得到与清单 25 相似的结果:

清单 25. 运行 BookSearcher Web 服务客户机程序

[bdm0509:~/Documents/developerworks/jax-rpc] java BookSearcherClient design Returned books for keyword ''design'':   Emotional Design   Indexed

这个结果没有多少新奇的地方;实际上,它与 清单 7 中测试程序的结果(清单 8)非常接近。主要 的区别并不 明显:所有请求和响应都使用 SOAP、XML 格式和 RPC

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号