使用开放源代码框架的 Java 应用程序的 Web 服务集成模式,第 1 部分: 实现调用模式
2009-11-05 00:00:00 来源:WEB开发网接下来,客户机读取调用的服务所需的输入参数。为此,客户机会在运行时使用 JAXB[12] 将 Java 格式的输入参数转换为 XML 元素对象 (org.w3c.dom.Element)。Java Architecture for XML Binding (JAXB) 提供了一种非常方便的方法,可将 XML 模式绑定到 Java 代码中的表示形式。
客户机将创建一个由这些 Element 对象组成的数组,并调用 Axis Call 对象的 invoke 方法。
invoke 方法构造 SOAP 请求消息,并通过发送消息来调用服务,从服务获取输出参数,然后将其作为 org.apache.axis.message.SOAPBodyElement 对象数组返回给客户机。
客户机然后构造与从服务接受到的输出参数对应的等效 Java 对象,这同样也是在运行时使用 JAXB(从 XML 到 Java 绑定)完成的。
然后,客户机将这一组 Java 对象提供给应用程序。
这种调用方法尤其适合用于调用具有复杂数据类型的文档样式 Web 服务。会首先使用 JAXB 将复杂数据类型转换为 XML,然后传递给服务调用者。输入参数也以 XML 格式接收,并使用 JAXB 解析回 Java 对象。
清单 3. 使用 WSIF 的 RPC 样式请求-响应 Web 服务客户机示例代码
SOAPBodyElement[] element = // create SOAPBodyElement array using input objects
// create call object
Service service = new Service();
Call call = (Call) service.createCall();
// set end point (http address)
call.setTargetEndpointAddress(endPoint);
// invoke the service by passing the SOAPBodyElement
Vector output = (Vector) call.invoke(element);
// create element array from vector
Element elemArray[] = new Element[output.size()];
for (int i = 0; i < output.size(); i++) {
if (output.get(i) instanceof Element) {
elemArray[i] = (Element) output.get(i);
}
if (output.get(i) instanceof SOAPBodyElement) {
elemArray[i] = ((SOAPBodyElement) output.get(i)).getAsDOM();
}
}
// convert Element array back into Java Objects using JAXB
更多精彩
赞助商链接