首页产品库评测行情新闻|手机数码笔记本台式机DIY硬件数字家庭数码相机办公外设|软件下载游戏开发|社区

更多

数码相机
MP4
LCD
机箱
音箱

软件资讯设计 工具 系统 开发 安全 办公 陶吧 IT教育 Vista频道 | 下载中心酷我音乐盒 腾讯QQ
天极网 > 开发频道>Web服务规范SOAP之构建SOAP客户机

Web服务规范SOAP之构建SOAP客户机

2007-11-10 10:09作者:佚名出处:论坛整理责任编辑:方舟

  创建请求

  要开始创建客户机,请确保 Axis2 lib 目录中的所有 *.jar 文件——指 Standard 分发版,而不是 War 分发版——都在您的 CLASSPATH 上,并创建名为 ClassifiedClient 的新类。创建有效负载,如清单 17 中所示。

  17. 有效负载

import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
import org.apache.axis2.om.OMElement;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import java.io.StringWriter;
import org.apache.axis2.om.OMAbstractFactory;
import org.apache.axis2.SOAP.SOAPFactory;
import org.apache.axis2.om.OMFactory;
import org.apache.axis2.om.OMNamespace;

public class ClassifiedClient {

    public static OMElement getEchoOMElement() {
        SOAPFactory fac = OMAbstractFactory.getSOAP12Factory();
        OMNamespace omNs = fac.createOMNamespace(
                "http://daily-moon.com/cms", "cms");
        OMElement method = fac.createOMElement("echo", omNs);
        OMElement value = fac.createOMElement("category", omNs);
        value.addChild(fac.createText(value, "classifieds"));
        method.addChild(value);

        return method;
    }

    public static void main(String[] args) {
        try {
            OMElement payload = ClassifiedClient.getEchoOMElement();
        } catch (Exception e) { //(XMLStreamException e) {
            System.out.println(e.toString());
        }
    }
}

  首先,创建工厂和命名空间,并使用其创建各个元素。在本例中,您将创建与前面示例完全相同的元素,因为将再次使用此客户机访问 echo 函数。(稍后将对其进行更改,以访问真正的服务。)

  接下来,将创建请求。

  创建请求

  下一步将创建实际的请求。同样,这方面也体现出技术随时间的发展。这里不会直接将请求发送到 URL,而要设置“端点引用”,如清单 18 中所示。

  清单 18. 请求中的端点引用

...
public class ClassifiedClient {
    private static EndpointReference targetEPR = new
        EndpointReference(
           "http://localhost:8080/axis2/services/MyService");

    public static OMElement getEchoOMElement() {
...
    }

    public static void main(String[] args) {
        try {
            OMElement payload = ClassifiedClient.getEchoOMElement();
            Options options = new Options();
            options.setTo(targetEPR);
            options.setTransportInProtocol(Constants.TRANSPORT_HTTP);

        } catch (Exception e) { //(XMLStreamException e) {
            System.out.println(e.toString());
        }
    }
}

  对 WS-Addressing 的全面讨论不在本教程的范畴之内,但完全可以说端点引用包含消息将定向到的 URL,还可以有选择地包含其他信息,如应答地址和其他资源属性等。

  首先,为请求创建 Options,以便为请求设置 EPR 和其他信息(如打算使用的传输协议)。完成了这些后,就可以实际发送请求了。

  发送请求

  完成了设置后,就可以发送请求了。对于 Axis 的 0.94 版,首选的方式是通过 ServiceClient 类发送消息,如清单 19 中所示。

  清单 19. 发送请求

...
    public static void main(String[] args) {
        try {
            OMElement payload = ClassifiedClient.getEchoOMElement();
            Options options = new Options();
            options.setTo(targetEPR);
            options.setTransportInProtocol(Constants.TRANSPORT_HTTP);

            ServiceClient sender = new ServiceClient();
            sender.setOptions(options);
            OMElement result = sender.sendReceive(payload);

        } catch (Exception e) { //(XMLStreamException e) {
            System.out.println(e.toString());
        }
    }
}

  将创建 ServiceClient 对象,并为其设置前面创建的 Options。然后就可以直接发送消息了。由于希望得到响应,因此将使用 sendReceive() 方法(该方法用于 in/out 类型的消息)。将在本教程的单向服务部分讨论单向消息的信息。sendReceive() 方法将在客户机接收到实际响应时将其返回。

  输出结果

  实际上,sendReceive() 并不会返回整个响应,而仅返回有效负载。如果将结果输出到命令行,应该清楚地看到清单 20 中的内容。

  清单 20. sendReceive 输出

...
            sender.setOptions(options);
            OMElement result = sender.sendReceive(payload);

            System.out.println(result.toString());

        } catch (Exception e) { //(XMLStreamException e) {
            System.out.println(e.toString());
        }
    }
}

  运行此客户机将获得清单 21 中所示的响应。

  清单 21. sendReceive 响应

<cms:echo xmlns:cms="http://daily-moon.com/cms"><cms:category>classifieds</cms:category></cms:echo>

  当然,接收到此数据后,可以使用其进行任何工作。接下来,我们将构建实际的 getNumberofArticles() 服务。

共2页。 上一页12
进入 最权威的Windows 7论坛 查看网友讨论

软件频道最新更新

热点推荐

IT嘉年华

编辑推荐

软件下载

热门
推荐

网友关注

软件
资料
游戏

装机推荐

文章排行

本周
本月
最新更新
天极服务|关于我们|About us|网站律师|RSS订阅|友情合作|加入我们|天极动态|网站地图|意见反馈|MSN/QQ上看天极
Copyright (C) 1999-2012 Yesky.com, All Rights Reserved 版权所有 天极网络