快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
lts.length; i++) {     System.out.println(" " + results[i]);    }   } }

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

时间:2011-08-02 IBM Brett McLaughlin

清单 22 中的代码创建一个新的 Service 实现,然后以这个类作为工厂创建 Call 实现的新实例(这 与使用 JAXP 等框架时编写的代码非常相似,您应该很熟悉)。

在更健壮的实现中,可能用一个工厂类创建 Service 实现,使 Apache Axis 代码根本不使用这个类 (至少不直接引用)。对于 Call 的 Apache Axis 实现也是如此。但是,为了简单,这个示例直接使用 这些 Axis 类。

有了 Call 对象,就可以做一些真正的 RPC 工作了。

指定要连接什么

在调用服务之前,需要配置 Call 对象。每个 Call 通常连接一个特定的服务 URL(按照 SOAP 和 RPC 术语,这是目标端点)和操作。如果想改变端点 URL 或操作,就要重新配置 Call(或创建新实例) 。

首先,创建一个 Java URL 对象来存储目标端点(发布 Web 服务的可通过 Web 访问的 URL):

serviceUrl = new URL(SERVICE_URL);

接下来,使用创建的 serviceURL 作为 Call 对象的 setTargetEndpointAddress() 方法的输入参数 :

call.setTargetEndpointAddress(serviceUrl);

现在,Call 知道了要连接哪个服务。但是,还需要指定要调用的操作。这需要使用 setOperationName() 方法,而且不能只传递简单的字符串。相反,必须传递一个 QName。但是,可以动 态地创建一个 QName,表示要使用 SOAP 编码,然后提供要调用的操作的字符串名:

call.setOperationName(new QName("http://soapinterop.org/", "search"));

这行代码写起来容易,但是不容易理解。QName 仅仅是一种表示限定名的方法,可以向 Java 平台提 供与 XML 相似的数据,让 Java 平台替您执行一些幕后处理。对于操作,要牢记 WSDL(一种 XML 变体 )用来表示每个操作。这是因为 Web 服务使用的 SOAP 传输协议以 XML 作为数据格式。所以,不能只使 用操作的 Java 字符串名;需要一个 QName。但是,在 javax.xml.namespace.QName 类的帮助下,这很 容易实现。清单 23 给出 search() 方法中需要的代码(请记住,前面已经添加了所有导入语句):

清单 23. 为服务调用设置端点和操作

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"));    // placeholder    return new Object[];   } 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服务(二)(5)

时间:2011-08-02 IBM Brett McLaughlin

获得结果

下面就要执行实际调用(使用 Call 对象)并获得结果。这要用 invoke() 方法来完成,这个方法以 一个对象数组作为参数:(Object[])。按照次

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