Spring Boot SOAP系列之WSDL是什麼「Lese」

相關歷史文章(閱讀本文以前,您可能須要先看下以前的系列java

WebService SOAP概述 - 第275篇web

WSDL是什麼「Lese」 - 第276篇數據庫

Spring boot webservice怎麼玩? - 第277篇apache

Spring boot cxf構建webservice服務 - 第278篇數組

Spring boot cxf調用webservice服務 - 第279篇瀏覽器

 

1、前言app

       在前面的小節中已經成功發佈了web service服務,這一節看看怎麼調用。url

 

2、WebService調用方式spa

       對於WebService的調用,有以下幾種方式:3d

(1)使用CXF.JaxWsDynamicClientFactory的client動態調用。

(2)利用axis2的RPC方式調用webservice。

(3)利用HttpClient調用webservice。

(4)經過javax.xml.ws.Service的方式調用WebService

       在這裏咱們使用方式一進行講解說明。

 

2、調用Hello CXF服務

       這裏能夠在新建一個項目,也能夠在原有的項目直接調用:

import java.lang.reflect.Method;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;

public class CXFClientTest {
    //動態調用
    public static void main(String[] args) throws Exception {
        JaxWsDynamicClientFactory dcflient = JaxWsDynamicClientFactory.newInstance();

        Client client=dcflient.createClient("http://127.0.0.1:8080/cxf/helloService?wsdl");

        // 須要密碼的狀況須要加上用戶名和密碼
        Object[] objects=client.invoke("sayHello","悟纖");
        for(Object obj:objects) {
            System.out.println(obj);
        }

}
 

       調用成功,控制檯打印:hello , 悟纖

BTW:調用的核心就是地址、方法、參數,調用自己是很簡單的一個事情。

 

3、調用查詢手機號歸屬地服務

       要調用服務,要知道WSDL文檔的地址:

http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl

       訪問WSDL文檔地址,能夠獲得以下的格式:

<wsdl:definitions
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
    xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
    xmlns:tns="http://WebXml.com.cn/"
    xmlns:s="http://www.w3.org/2001/XMLSchema"
    xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
    xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    targetNamespace="http://WebXml.com.cn/">
    <wsdl:documentation
        xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
        <a href="http://www.webxml.com.cn/" target="_blank">WebXml.com.cn</a>
        <strong>國內手機號碼歸屬地查詢WEB服務</strong>
        ,提供最新的國內手機號碼段歸屬地數據,每個月更新。
        <br />
        使用本站 WEB 服務請註明或連接本站:
        <a href="http://www.webxml.com.cn/" target="_blank">http://www.webxml.com.cn/</a>
        感謝你們的支持!
        <br />&nbsp;
    </wsdl:documentation>
    <wsdl:types>
        <s:schema elementFormDefault="qualified"
            targetNamespace="http://WebXml.com.cn/">
            <s:element name="getMobileCodeInfo">
                <s:complexType>
                    <s:sequence>
                        <s:element minOccurs="0" maxOccurs="1" name="mobileCode"
                            type="s:string" />
                        <s:element minOccurs="0" maxOccurs="1" name="userID"
                            type="s:string" />
                    </s:sequence>
                </s:complexType>
            </s:element>
            <s:element name="getMobileCodeInfoResponse">
                <s:complexType>
                    <s:sequence>
                        <s:element minOccurs="0" maxOccurs="1"
                            name="getMobileCodeInfoResult" type="s:string" />
                    </s:sequence>
                </s:complexType>
            </s:element>
            <s:element name="getDatabaseInfo">
                <s:complexType />
            </s:element>
            <s:element name="getDatabaseInfoResponse">
                <s:complexType>
                    <s:sequence>
                        <s:element minOccurs="0" maxOccurs="1"
                            name="getDatabaseInfoResult" type="tns:ArrayOfString" />
                    </s:sequence>
                </s:complexType>
            </s:element>
            <s:complexType name="ArrayOfString">
                <s:sequence>
                    <s:element minOccurs="0" maxOccurs="unbounded"
                        name="string" nillable="true" type="s:string" />
                </s:sequence>
            </s:complexType>
            <s:element name="string" nillable="true" type="s:string" />
            <s:element name="ArrayOfString" nillable="true"
                type="tns:ArrayOfString" />
        </s:schema>
    </wsdl:types>
    <wsdl:message name="getMobileCodeInfoSoapIn">
        <wsdl:part name="parameters" element="tns:getMobileCodeInfo" />
    </wsdl:message>
    <wsdl:message name="getMobileCodeInfoSoapOut">
        <wsdl:part name="parameters"
            element="tns:getMobileCodeInfoResponse" />
    </wsdl:message>
    <wsdl:message name="getDatabaseInfoSoapIn">
        <wsdl:part name="parameters" element="tns:getDatabaseInfo" />
    </wsdl:message>
    <wsdl:message name="getDatabaseInfoSoapOut">
        <wsdl:part name="parameters"
            element="tns:getDatabaseInfoResponse" />
    </wsdl:message>
    <wsdl:message name="getMobileCodeInfoHttpGetIn">
        <wsdl:part name="mobileCode" type="s:string" />
        <wsdl:part name="userID" type="s:string" />
    </wsdl:message>
    <wsdl:message name="getMobileCodeInfoHttpGetOut">
        <wsdl:part name="Body" element="tns:string" />
    </wsdl:message>
    <wsdl:message name="getDatabaseInfoHttpGetIn" />
    <wsdl:message name="getDatabaseInfoHttpGetOut">
        <wsdl:part name="Body" element="tns:ArrayOfString" />
    </wsdl:message>
    <wsdl:message name="getMobileCodeInfoHttpPostIn">
        <wsdl:part name="mobileCode" type="s:string" />
        <wsdl:part name="userID" type="s:string" />
    </wsdl:message>
    <wsdl:message name="getMobileCodeInfoHttpPostOut">
        <wsdl:part name="Body" element="tns:string" />
    </wsdl:message>
    <wsdl:message name="getDatabaseInfoHttpPostIn" />
    <wsdl:message name="getDatabaseInfoHttpPostOut">
        <wsdl:part name="Body" element="tns:ArrayOfString" />
    </wsdl:message>
    <wsdl:portType name="MobileCodeWSSoap">
        <wsdl:operation name="getMobileCodeInfo">
            <wsdl:documentation
                xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
                <br />
                <h3>得到國內手機號碼歸屬地省份、地區和手機卡類型信息</h3>
                <p>輸入參數:mobileCode = 字符串(手機號碼,最少前7位數字),userID = 字符串(商業用戶ID)
                    免費用戶爲空字符串;返回數據:字符串(手機號碼:省份 城市 手機卡類型)。</p>
                <br />
            </wsdl:documentation>
            <wsdl:input message="tns:getMobileCodeInfoSoapIn" />
            <wsdl:output message="tns:getMobileCodeInfoSoapOut" />
        </wsdl:operation>
        <wsdl:operation name="getDatabaseInfo">
            <wsdl:documentation
                xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
                <br />
                <h3>得到國內手機號碼歸屬地數據庫信息</h3>
                <p>輸入參數:無;返回數據:一維字符串數組(省份 城市 記錄數量)。</p>
                <br />
            </wsdl:documentation>
            <wsdl:input message="tns:getDatabaseInfoSoapIn" />
            <wsdl:output message="tns:getDatabaseInfoSoapOut" />
        </wsdl:operation>
    </wsdl:portType>
    <wsdl:portType name="MobileCodeWSHttpGet">
        <wsdl:operation name="getMobileCodeInfo">
            <wsdl:documentation
                xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
                <br />
                <h3>得到國內手機號碼歸屬地省份、地區和手機卡類型信息</h3>
                <p>輸入參數:mobileCode = 字符串(手機號碼,最少前7位數字),userID = 字符串(商業用戶ID)
                    免費用戶爲空字符串;返回數據:字符串(手機號碼:省份 城市 手機卡類型)。</p>
                <br />
            </wsdl:documentation>
            <wsdl:input message="tns:getMobileCodeInfoHttpGetIn" />
            <wsdl:output message="tns:getMobileCodeInfoHttpGetOut" />
        </wsdl:operation>
        <wsdl:operation name="getDatabaseInfo">
            <wsdl:documentation
                xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
                <br />
                <h3>得到國內手機號碼歸屬地數據庫信息</h3>
                <p>輸入參數:無;返回數據:一維字符串數組(省份 城市 記錄數量)。</p>
                <br />
            </wsdl:documentation>
            <wsdl:input message="tns:getDatabaseInfoHttpGetIn" />
            <wsdl:output message="tns:getDatabaseInfoHttpGetOut" />
        </wsdl:operation>
    </wsdl:portType>
    <wsdl:portType name="MobileCodeWSHttpPost">
        <wsdl:operation name="getMobileCodeInfo">
            <wsdl:documentation
                xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
                <br />
                <h3>得到國內手機號碼歸屬地省份、地區和手機卡類型信息</h3>
                <p>輸入參數:mobileCode = 字符串(手機號碼,最少前7位數字),userID = 字符串(商業用戶ID)
                    免費用戶爲空字符串;返回數據:字符串(手機號碼:省份 城市 手機卡類型)。</p>
                <br />
            </wsdl:documentation>
            <wsdl:input message="tns:getMobileCodeInfoHttpPostIn" />
            <wsdl:output message="tns:getMobileCodeInfoHttpPostOut" />
        </wsdl:operation>
        <wsdl:operation name="getDatabaseInfo">
            <wsdl:documentation
                xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
                <br />
                <h3>得到國內手機號碼歸屬地數據庫信息</h3>
                <p>輸入參數:無;返回數據:一維字符串數組(省份 城市 記錄數量)。</p>
                <br />
            </wsdl:documentation>
            <wsdl:input message="tns:getDatabaseInfoHttpPostIn" />
            <wsdl:output message="tns:getDatabaseInfoHttpPostOut" />
        </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="MobileCodeWSSoap"
        type="tns:MobileCodeWSSoap">
        <soap:binding
            transport="http://schemas.xmlsoap.org/soap/http" />
        <wsdl:operation name="getMobileCodeInfo">
            <soap:operation
                soapAction="http://WebXml.com.cn/getMobileCodeInfo" style="document" />
            <wsdl:input>
                <soap:body use="literal" />
            </wsdl:input>
            <wsdl:output>
                <soap:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getDatabaseInfo">
            <soap:operation
                soapAction="http://WebXml.com.cn/getDatabaseInfo" style="document" />
            <wsdl:input>
                <soap:body use="literal" />
            </wsdl:input>
            <wsdl:output>
                <soap:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:binding name="MobileCodeWSSoap12"
        type="tns:MobileCodeWSSoap">
        <soap12:binding
            transport="http://schemas.xmlsoap.org/soap/http" />
        <wsdl:operation name="getMobileCodeInfo">
            <soap12:operation
                soapAction="http://WebXml.com.cn/getMobileCodeInfo" style="document" />
            <wsdl:input>
                <soap12:body use="literal" />
            </wsdl:input>
            <wsdl:output>
                <soap12:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getDatabaseInfo">
            <soap12:operation
                soapAction="http://WebXml.com.cn/getDatabaseInfo" style="document" />
            <wsdl:input>
                <soap12:body use="literal" />
            </wsdl:input>
            <wsdl:output>
                <soap12:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:binding name="MobileCodeWSHttpGet"
        type="tns:MobileCodeWSHttpGet">
        <http:binding verb="GET" />
        <wsdl:operation name="getMobileCodeInfo">
            <http:operation location="/getMobileCodeInfo" />
            <wsdl:input>
                <http:urlEncoded />
            </wsdl:input>
            <wsdl:output>
                <mime:mimeXml part="Body" />
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getDatabaseInfo">
            <http:operation location="/getDatabaseInfo" />
            <wsdl:input>
                <http:urlEncoded />
            </wsdl:input>
            <wsdl:output>
                <mime:mimeXml part="Body" />
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:binding name="MobileCodeWSHttpPost"
        type="tns:MobileCodeWSHttpPost">
        <http:binding verb="POST" />
        <wsdl:operation name="getMobileCodeInfo">
            <http:operation location="/getMobileCodeInfo" />
            <wsdl:input>
                <mime:content type="application/x-www-form-urlencoded" />
            </wsdl:input>
            <wsdl:output>
                <mime:mimeXml part="Body" />
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getDatabaseInfo">
            <http:operation location="/getDatabaseInfo" />
            <wsdl:input>
                <mime:content type="application/x-www-form-urlencoded" />
            </wsdl:input>
            <wsdl:output>
                <mime:mimeXml part="Body" />
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:service name="MobileCodeWS">
        <wsdl:documentation
            xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
            <a href="http://www.webxml.com.cn/" target="_blank">WebXml.com.cn</a>
            <strong>國內手機號碼歸屬地查詢WEB服務</strong>
            ,提供最新的國內手機號碼段歸屬地數據,每個月更新。
            <br />
            使用本站 WEB 服務請註明或連接本站:
            <a href="http://www.webxml.com.cn/" target="_blank">http://www.webxml.com.cn/</a>
            感謝你們的支持!
            <br />&nbsp;
        </wsdl:documentation>
        <wsdl:port name="MobileCodeWSSoap"
            binding="tns:MobileCodeWSSoap">
            <soap:address
                location="http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx" />
        </wsdl:port>
        <wsdl:port name="MobileCodeWSSoap12"
            binding="tns:MobileCodeWSSoap12">
            <soap12:address
                location="http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx" />
        </wsdl:port>
        <wsdl:port name="MobileCodeWSHttpGet"
            binding="tns:MobileCodeWSHttpGet">
            <http:address
                location="http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx" />
        </wsdl:port>
        <wsdl:port name="MobileCodeWSHttpPost"
            binding="tns:MobileCodeWSHttpPost">
            <http:address
                location="http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx" />
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>
 

       能夠本身用瀏覽器打開訪問一下;

       一眼望去,可能接口看起來很複雜,較爲繁瑣。  可是做爲開發人員,使用的時候,  咱們能夠查看關注點信息,就能實現接口的調用了。

       那麼咱們須要瞭解哪些信息呢?

       從上面的文檔裏面,咱們須要從頭部(最上面一行)瞭解到:

targetNamespace="http://WebXml.com.cn/"

       經過wsdl:portType能夠該文檔提供了以下方法:

getMobileCodeInfo:得到國內手機號碼歸屬地省份、地區和手機卡類型信息。

getDatabaseInfo:得到國內手機號碼歸屬地數據庫信息。

       經過types就能找到getMobileCodeInfo須要傳遞的參數:

<s:sequence>
    <s:element minOccurs="0" maxOccurs="1" name="mobileCode"
        type="s:string" />
    <s:element minOccurs="0" maxOccurs="1" name="userID"
        type="s:string" />
</s:sequence>
 

       須要兩個參數:

mobileCode:手機號碼,最少前7位數字

userID:商業用戶ID) 免費用戶爲空字符串

       經過service找到請求地址:

http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx

       綜上分析就能夠得出,發起SOAP請求所須要的數據了:

WebService的URL:http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx
Namespace:http://WebXml.com.cn/
method:getMobileCodeInfo/getDatabaseInfo
params:mobileCode(必須)、userId(非必須)

 

       這時候獲得這些信息以後,就能夠編寫代碼進行調用了:

package com.kfit.demo;

import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;

public class CXFClientForMobileCodeTest {
    //動態調用
    public static void main(String[] args) throws Exception {
        JaxWsDynamicClientFactory dcflient = JaxWsDynamicClientFactory.newInstance();

        Client client=dcflient.createClient("http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl");

        Object[] objects=client.invoke("getMobileCodeInfo","1593258xxxx","");
        for(Object obj:objects) {
            System.out.println(obj);
        }
    }

}
 

       調用成功以後,控制檯返回:1593258xxxx:河北 唐山 河北移動全球通卡

 

我就是我,是顏色不同的煙火。
我就是我,是不同凡響的小蘋果。

 

à悟空學院:http://t.cn/Rg3fKJD

學院中有Spring Boot相關的課程!點擊「閱讀原文」進行查看!

 

SpringBoot視頻:http://t.cn/R3QepWG

Spring Cloud視頻:http://t.cn/R3QeRZc

SpringBoot Shiro視頻:http://t.cn/R3QDMbh

SpringBoot交流平臺:http://t.cn/R3QDhU0

SpringData和JPA視頻:http://t.cn/R1pSojf

SpringSecurity5.0視頻:http://t.cn/EwlLjHh

Sharding-JDBC分庫分表實戰:http://t.cn/E4lpD6e

相關文章
相關標籤/搜索