• WebService的四种客户端调用方式


     web service(SOAP)与HTTP接口的区别:https://www.cnblogs.com/leeego-123/p/10404631.html

    http是一种网络协议,而webservice是一种两个应bai用程序之间实现通信的du解决方案。
    但是两者之间是有联系的,Webservice实现消息的传送就是将消息依附在http上进行传输的。

    一、生成客户端调用方式

    1、Wsimport命令介绍

    Wsimport就是jdk提供的的一个工具,他的作用就是根据WSDL地址生成客户端代码

    Wsimport位置JAVA_HOME/bin

    Wsimport常用的参数:

    • -s,生成java文件的
    • -d,生成class文件的,默认的参数
    •  -p,指定包名的,如果不加该参数,默认包名就是wsdl文档中的命名空间的倒序

     Wsimport仅支持SOAP1.1客户端的生成

     

    2、 调用公网手机号归属地查询服务

    第一步:wsimport生成客户端代码

    wsimport -p cn.hcx.mobile -s .http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl

    第二步:阅读使用说明书,使用生成客户端代码调用服务端

    package cn.hcx.mobile.client;
     
    import cn.hcx.mobile.MobileCodeWS;
    import cn.hcx.mobile.MobileCodeWSSoap;
     
    /**
     * 
     * <p>Title: MobileClient.java</p>
     * <p>Description:公网手机号查询客户端</p>*
     */
    public class MobileClient {
     
        public static void main(String[] args) {
            //创建服务视图
            MobileCodeWS mobileCodeWS = new MobileCodeWS();
            //获取服务实现类
            MobileCodeWSSoap mobileCodeWSSoap = mobileCodeWS.getPort(MobileCodeWSSoap.class);
            //调用查询方法
            String reuslt = mobileCodeWSSoap.getMobileCodeInfo("13888888", null);
            System.out.println(reuslt);
        }
    }

    3、公网天气服务端查询

    package cn.hcx.mobile.client;
     
    import java.util.List;
     
    import cn.hcx.weather.ArrayOfString;
    import cn.hcx.weather.WeatherWS;
    import cn.hcx.weather.WeatherWSSoap;
     
    /**
     * 
     * <p>Title: WeatherClient.java</p>
     * <p>Description:公网天气查询客户端</p>
     * 
     */
    public class WeatherClient {
     
        public static void main(String[] args) {
            WeatherWS weatherWS = new WeatherWS();
            WeatherWSSoap weatherWSSoap = weatherWS.getPort(WeatherWSSoap.class);
            ArrayOfString  arrayOfString = weatherWSSoap.getWeather("北京", "");
            List<String> list = arrayOfString.getString();
            
            for(String str : list){
                System.out.println(str);
            }
        }
    }

    4、特点

    该种方式使用简单,但一些关键的元素在代码生成时写死到生成代码中,不方便维护,所以仅用于测试。

    二、service编程调用方式

    package cn.hcx.mobile.client;
     
    import java.io.IOException;
    import java.net.MalformedURLException;
    import java.net.URL;
     
    import javax.xml.namespace.QName;
    import javax.xml.ws.Service;
     
    import cn.hcx.mobile.MobileCodeWSSoap;
     
    /**
     * 
     * <p>Title: ServiceClient.java</p>
     * <p>Description:Service编程实现服务端调用</p>
     * 
     */
    public class ServiceClient {
     
        public static void main(String[] args) throws IOException {
            //创建WSDL的URL,注意不是服务地址
            URL url = new URL("http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl");
            
            //创建服务名称
            //1.namespaceURI - 命名空间地址
            //2.localPart - 服务视图名
            QName qname = new QName("http://WebXml.com.cn/", "MobileCodeWS");
            
            //创建服务视图
            //参数解释:
            //1.wsdlDocumentLocation - wsdl地址
            //2.serviceName - 服务名称
            Service service = Service.create(url, qname);
            //获取服务实现类
            MobileCodeWSSoap mobileCodeWSSoap = service.getPort(MobileCodeWSSoap.class);
            //调用查询方法
            String result = mobileCodeWSSoap.getMobileCodeInfo("1866666666", "");
            System.out.println(result);
        }
    }

    特点

    该种方式可以自定义关键元素,方便以后维护,是一种标准的开发方式

    三、HttpURLConnection调用方式

    开发步骤:

    第一步:创建服务地址

    第二步:打开一个通向服务地址的连接

    第三步:设置参数

    设置POST,POST必须大写,如果不大写,报异常

    如果不设置输入输出,报异常

    第四步:组织SOAP数据,发送请求

    第五步:接收服务端响应,打印

    package cn.hcx.mobile.client;
     
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
     
    /**
     * 
     * <p>Title: HttpClient.java</p>
     * <p>Description:HttpURLConnection调用方式</p>
     */
    public class HttpClient {
     
        public static void main(String[] args) throws IOException {
            //第一步:创建服务地址,不是WSDL地址
            URL url = new URL("http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx");
            //第二步:打开一个通向服务地址的连接
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            //第三步:设置参数
            //3.1发送方式设置:POST必须大写
            connection.setRequestMethod("POST");
            //3.2设置数据格式:content-type
            connection.setRequestProperty("content-type", "text/xml;charset=utf-8");
            //3.3设置输入输出,因为默认新创建的connection没有读写权限,
            connection.setDoInput(true);
            connection.setDoOutput(true);
     
            //第四步:组织SOAP数据,发送请求
            String soapXML = getXML("15226466316");
            OutputStream os = connection.getOutputStream();
            os.write(soapXML.getBytes());
            //第五步:接收服务端响应,打印
            int responseCode = connection.getResponseCode();
            if(200 == responseCode){//表示服务端响应成功
                InputStream is = connection.getInputStream();
                InputStreamReader isr = new InputStreamReader(is);
                BufferedReader br = new BufferedReader(isr);
                
                StringBuilder sb = new StringBuilder();
                String temp = null;
                while(null != (temp = br.readLine())){
                    sb.append(temp);
                }
                System.out.println(sb.toString());
                
                is.close();
                isr.close();
                br.close();
            }
     
            os.close();
        }
        
        /**
         * <?xml version="1.0" encoding="utf-8"?>
    <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
      <soap:Body>
        <getMobileCodeInfo xmlns="http://WebXml.com.cn/">
          <mobileCode>string</mobileCode>
          <userID>string</userID>
        </getMobileCodeInfo>
      </soap:Body>
    </soap:Envelope>
         * @param phoneNum
         * @return
         */
        public static String getXML(String phoneNum){
            String soapXML = "<?xml version="1.0" encoding="utf-8"?>"
            +"<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">"
                +"<soap:Body>"
                +"<getMobileCodeInfo xmlns="http://WebXml.com.cn/">"
                    +"<mobileCode>"+phoneNum+"</mobileCode>"
                  +"<userID></userID>"
                +"</getMobileCodeInfo>"
              +"</soap:Body>"
            +"</soap:Envelope>";
            return soapXML;
        }
    }

    四、Ajax调用方式

    <!doctype html>
    <html lang="en">
     <head>
      <meta charset="UTF-8">
      <title>Document</title>
      <script type="text/javascript">
        function queryMobile(){
            //创建XMLHttpRequest对象
            var xhr = new XMLHttpRequest();
            //打开连接
            xhr.open("post","http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx",true);
            //设置数据类型
            xhr.setRequestHeader("content-type","text/xml;charset=utf-8");
            //设置回调函数
            xhr.onreadystatechange=function(){
                //判断是否发送成功和判断服务端是否响应成功
                if(4 == xhr.readyState && 200 == xhr.status){
                    alert(xhr.responseText);
                }
            }
            //组织SOAP协议数据
            var soapXML = "<?xml version="1.0" encoding="utf-8"?>"
            +"<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">"
                +"<soap:Body>"
                +"<getMobileCodeInfo xmlns="http://WebXml.com.cn/">"
                    +"<mobileCode>"+document.getElementById("phoneNum").value+"</mobileCode>"
                  +"<userID></userID>"
                +"</getMobileCodeInfo>"
              +"</soap:Body>"
            +"</soap:Envelope>";
            alert(soapXML);
            //发送数据
            xhr.send(soapXML);
        }
      </script>
     </head>
     <body>
      手机号查询:<input type="text" id="phoneNum"/> <input type="button" value="查询" onclick="javascript:queryMobile();"/>
     </body>
    </html>
  • 相关阅读:
    微信接龙转Excel
    Nginx日志拆分(linux环境下)
    Nginx 安全设置(禁止Iframe跨域访问、隐藏server、限制ip访问)
    Nginx开机启动(Linux环境下)
    Navicat Premium 16激活教程(NavicatCracker)
    Tomcat日志拆分(linux)
    mysql 事务
    mysql 5.7数据类型支持json格式
    mysql 用户 权限管理
    mysql 读写锁(表锁myisam行锁innodb)
  • 原文地址:https://www.cnblogs.com/xiejn/p/13899453.html
Copyright © 2020-2023  润新知