快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
3) 时间:2011-08-02 IBM Brett McLaughlin

清单 21 首先导入需要的所有类。这样就不必分散地添加这些类,这个过程单调乏味而且容易产生错 误。几个类与 URL 连接相关,在连接 Web 服务时需要这些类。另外四个类(两个在 javax.xml 中,两 个在 org.apache.axis.client 中)与 RPC 相关。后面会详细讨论每个类。

清单 21 还包含一个常量,这是要连接的 Web 服务的 URL。如果您使用不同的主机名或端口,就需要 修改这个 URL,使它与自己的 servlet 引擎和 BookSearcher Web 服务路径匹配。URL 可能类似于 http://dev.myDomain.com/apps/BookSearcher.jws。可以使用不同的 URL,只要在浏览器中输入这个 URL 时能够获得与 图 7 相似的响应即可。

接下来是一个空的构造函数和一个根据关键字进行搜索的方法。稍后将详细讨论这个方法,所以暂时 不必讨论这个方法为什么返回 Object[] (一个对象数组)。但是,目前这个方法只返回 null,这样就 可以编译这个类。这个方法包含大部分 RPC 客户机代码。

最后一段代码(类的 main() 方法)创建一个新对象,从命令行获取一个关键字,并把它发送给 search() 方法,这个方法进而向 Web 服务发出请求。然后,构建客户机代码,向 Web 服务发出请求。

创建一个 Service 和 Call 对象

JAX-RPC 客户机代码的两个基本对象是 org.apache.axis.client.Call 和 org.apache.axis.client.Service。这两个对象是 JAX-RPC javax.xml.rpc.Call 和 javax.xml.rpc.Service 类的实现。Apache Axis 提供了这些对象,其他 RPC 框架也提供自己的实现。

在任何 RPC 客户机中,第一步都是创建 Service 的新实例。然后,从这个实例创建 Call 的新实例 ,这样就可以调用服务了。清单 22 给出应该在 BookSearcherClient 类中添加的代码:几个新的成员变 量和 search() 中的几行:

清单 22. 创建 Service 和 Call 实现

import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import javax.xml.namespace.QName; import javax.xml.rpc.ServiceException; import org.apache.axis.client.Call; import org.apache.axis.client.Service; public class BookSearcherClient {   public static final String SERVICE_URL =    "http://localhost:8080/axis/BookSearcher.jws";   private Service service;   private Call call;   private URL serviceUrl;   public BookSearcherClient() { }   public Object[] search(String keyword) throws IOException {    try {     if (service == null) {      service = new Service();     }     if (call == null) {      call = (Call)service.createCall();     }     // placeholder     return new Object[];    } catch (ServiceException e) {     throw new IOException("Error creating service call: " + e.getMessage ());    }   }   public static void main(String[] args) throws IOException {    if (args.length != 1) {     System.err.println("Usage: java BookSearcherClient [search keyword]");     return;    }    String keyword = args[0];    BookSearcherClient client = new BookSearcherClient();    Object[] results = client.search(keyword);    System.out.println("Returned books for keyword ''" + keyword + "'':");    for (int i = 0; i<resu

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号