WebService的初步探究与应用-02(SOAP协议)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yangqian201175/article/details/51235400

本文中主要内容是对于Soap协议的内容进行梳理,并且利用TCP/IP Mointor工具对于SOAP协议进行监视,以及为了更好得理解SOAP协议的主要内容,利用HTTP模拟SOAP协议的发送。

  • 1、SOAP协议简介
  • 2、使用TCP/IP monitor工具对于SOAP协议监视(eclipse中已经自带的工具无下载安装,直接可用)
  • 3、SOAP协议体内容以及利用HTTP协议模拟SOAP协议发送
  • 4、SOAP1.1以及SOAP1.2两个版本的比较
  • 1、SOAP协议简介(是什么?)
    (下面对于SOAP协议的简介内容来源于百度以及其他博文,特此申明)
  • SOAP 是一种网络通信协议
  • SOAP即Simple Object Access Protocol简易对象访问协议
  • SOAP 用于跨平台应用程序之间的通信
  • SOAP 被设计用来通过因特网(http)进行通信
  • SOAP = HTTP+XML,其实就是通过HTTP发xml数据
  • SOAP 很简单并可扩展支持面向对象
  • SOAP 允许您跨越防火墙
  • SOAP 将被作为 W3C 标准来发展

2、使用TCP/IP monitor工具对于SOAP协议监视(eclipse中已经自带的工具无下载安装,直接可用)
我使用的是MyEclipse 2015 稳定版本2.0,Eclipse 最新版本luna也是同样可以使用
首先在使用该工具之前首先要理解的是该工具的工作原理:
1、简单来说:理解为邮差,是一个敬职敬业的转发员,将我们从server服务端发送的信息通过自身的周转发送到client客户端;
2、既然是一位转发人员同样的是需要转交手续的,也就是端口(PORT),所以server服务端的端口号必须与TCP/IP monitor的端口号,而并非是在之前我们测试WebService使用的时候,Client直接接收的端口号,之后通过TCP/IP monitor的处理转发,转发出的需要使用的是转发出的端口号与Client的接受端口号相一致,具体的内容图示如下:
下面的例子使用的是,我在之前WebService的初步探究与应用-01中的WebService的例子,大家如果有兴趣可以瞅瞅;


下面主要详细讲述一下如何使用这样的工具(监视SOAP协议内容):

2.1、首先得打开工具:
打开该工具的描述

2.2、配置使用Monitor,并且开启Monitor:
首先我们需要在TCP/IP Monitor中添加一个新的Monitor监测工具,不要忘记Start否则无法使用!
Monitor的配置以及使用

2.3、开始测试(测试前不要忘记调整客户端的端口哦,例如根据上图客户端的端口需要修改为54321)
先运行服务端,再运行客户端,效果如下:
客户端访问后的monitor的结果

  • 3、SOAP协议体内容以及利用HTTP协议模拟SOAP协议发送
  • 模拟一个http的客户端(相当于一个浏览器),客户端通过程序实现,向webservice的服务端发送soap协议(xml)。http客户端意义:企业开发中,有许多时候都是使用的是http接口,需要通过写程序模拟http请求,请求数据解析数据。

以下代码主要是利用http协议进行模拟的实现:

    public static void main(String[] args) throws IOException {
        //开启 一个http链接
        //webservice地址
        URL url = new URL("http://127.0.0.1:23456/weather");
        HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
        //设置post请求,post是大写
        httpURLConnection.setRequestMethod("POST");
        //Content-Type: text/xml; charset=utf-8
        httpURLConnection.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
        //设置请求和响应
        httpURLConnection.setDoInput(true);
        httpURLConnection.setDoOutput(true);

        String requestString = requestString("郑州");
        //发送soap协议
        httpURLConnection.getOutputStream().write(requestString.getBytes());

        //接收响应内容

        InputStream inputStream = httpURLConnection.getInputStream();

        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

        int len=-1;
        byte[] b = new byte[1024];
        //将inputStream内容写到byteArrayOutputStream
        while((len= inputStream.read(b, 0, 1024))!=-1){
            byteArrayOutputStream.write(b, 0, len);
        }

        //获取响应内容 
        String responseString = byteArrayOutputStream.toString();

        System.out.println(responseString);

        //解析响应的xml数据。
        //....


        inputStream.close();
        byteArrayOutputStream.close();
    }

    /**
     * 模拟soap协议请求内容
     * @param cityName
     * @return
     */
    public static String requestString(String cityName) {

        String xmlString = 
                "<?xml version=\"1.0\" ?>" +
                "<S:Envelope xmlns:S=\"http://schemas.xmlsoap.org/soap/envelope/\">" +
                    "<S:Body>" +
                        "<ns2:queryWeather xmlns:ns2=\"http://server.socket.jaxws/\">" +
                            "<arg0>"+cityName+"</arg0>" +
                        "</ns2:queryWeather>" +
                    "</S:Body>" +
                "</S:Envelope>";

        return xmlString;
    }
}

  • 4、SOAP1.1以及SOAP1.2两个版本的比较
  • Soap1.1版本:
    通过http进行post请求。
    Content-Type: text/xml; charset=utf-8
    Soap1.1命名空间:http://schemas.xmlsoap.org/soap/envelope/
  • Soap1.2版本:
    Post请求
    Content-Type: application/soap+xml;
    soap1.2命名空间:http://www.w3.org/2003/05/soap-envelope
    总结:
  • soap1.1的服务端需要soap11客户端调用
  • soap1.2的服务端soap1.1客户端和soap1.2客户端都 可以调用。

猜你喜欢

转载自blog.csdn.net/yangqian201175/article/details/51235400