WEB开发网
开发学院软件开发Java 用 JAX-RPC 构建 RPC 服务和客户机(下) 阅读

用 JAX-RPC 构建 RPC 服务和客户机(下)

 2010-04-06 00:00:00 来源:WEB开发网   
核心提示: 清单 22 中的代码创建一个新的 Service 实现,然后以这个类作为工厂创建 Call 实现的新实例(这与使用 JAXP 等框架时编写的代码非常相似,用 JAX-RPC 构建 RPC 服务和客户机(下)(7),您应该很熟悉),在更健壮的实现中,在 javax.xml.namespace.QN

清单 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() 方法中需要的代码(请记住,前面已经添加了所有导入语句):

上一页  2 3 4 5 6 7 8 9 10  下一页

Tags:JAX RPC 构建

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接