用 JAX-RPC 构建 RPC 服务和客户机(下)
2010-04-06 00:00:00 来源:WEB开发网清单 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() 方法中需要的代码(请记住,前面已经添加了所有导入语句):
- ››构建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 中介来将分隔文件转换为服务调用
更多精彩
赞助商链接