`

Spring Boot SOAP系列之WSDL是什么“Lese”

阅读更多

相关历史文章(阅读本文之前,您可能需要先看下之前的系列

WebService SOAP概述 - 第275篇

WSDL是什么“Lese” - 第276篇

Spring boot webservice怎么玩? - 第277篇

Spring boot cxf构建webservice服务 - 第278篇

Spring boot cxf调用webservice服务 - 第279篇

 

一、前言

       在前面的小节中已经成功发布了web service服务,这一节看看怎么调用。

 

二、WebService调用方式

       对于WebService的调用,有如下几种方式:

(1)使用CXF.JaxWsDynamicClientFactory的client动态调用。

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

(3)利用HttpClient调用webservice。

(4)通过javax.xml.ws.Service的方式调用WebService

       在这里我们使用方式一进行讲解说明。

 

二、调用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:调用的核心就是地址、方法、参数,调用本身是很简单的一个事情。

 

三、调用查询手机号归属地服务

       要调用服务,要知道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:河北 唐山 河北移动全球通卡

 

我就是我,是颜色不一样的烟火。
我就是我,是与众不同的小苹果。

 à悟空学院:https://t.cn/Rg3fKJD

学院中有Spring Boot相关的课程!点击「阅读原文」进行查看!

SpringBoot视频:http://t.cn/A6ZagYTi

Spring Cloud视频:http://t.cn/A6ZagxSR

SpringBoot Shiro视频:http://t.cn/A6Zag7IV

SpringBoot交流平台:https://t.cn/R3QDhU0

SpringData和JPA视频:http://t.cn/A6Zad1OH

SpringSecurity5.0视频:http://t.cn/A6ZadMBe

Sharding-JDBC分库分表实战http://t.cn/A6ZarrqS

分布式事务解决方案「手写代码」:http://t.cn/A6ZaBnIr

 

分享到:
评论

相关推荐

    spring-boot-soap-ws-example:Spring Boot SOAP Web服务示例

    【Spring Boot SOAP Web服务示例】是一个基于Spring Boot框架创建SOAP(简单对象访问协议)Web服务的实践项目。SOAP是一种标准的、基于XML的协议,用于在Web上交换结构化的和类型化的信息。Spring Boot简化了Java...

    spring boot 开发soap webservice的实现代码

    Spring Boot 开发 SOAP WebService 的实现代码 概述: 本文主要介绍了 Spring Boot 开发 SOAP WebService 的实现代码,包括如何在 Spring Boot 中开发 SOAP WebService 接口,以及接口如何同时支持 SOAP 和 ...

    SOAP消息和WSDL

    **SOAP消息和WSDL详解** SOAP(Simple Object Access Protocol)是一种基于XML的协议,用于在Web上交换结构化和类型化的信息。它允许应用程序通过HTTP等传输协议进行通信,从而实现分布式计算。SOAP消息通常由三...

    spring boot2.1 webservice

    总的来说,"spring boot2.1 webservice"项目提供了一个快速启动Web服务开发的平台,适用于那些希望使用Spring Boot和SOAP技术进行服务化开发的开发者。项目中的代码和文档将帮助学习者理解Spring WS在Spring Boot...

    soap协议请求与分析.rar_ Soap_SOAP java_WSDL_java soap_soap

    SOAP协议通常与WSDL(Web Services Description Language)一起使用,用于定义Web服务接口和绑定。 在SOAP协议中,一个SOAP消息通常包含以下几个部分: 1. **SOAP Envelope**:这是SOAP消息的基本结构,定义了消息...

    Web+Service学习SOAP协议简介WSDL简介

    Web Service 学习 SOAP 协议简介 WSDL 简介 Web Service 概述 Web Service 是一种软件系统,旨在支持跨网络的机器间相互操作交互。它通常被定义为一组模块化的 API,可以通过网络进行调用,以执行远程系统的请求...

    CXF整合spring实现SOAP接口开发

    6. **CXF_Spring中的示例**:在提供的压缩包文件"CXF_Spring"中,可能包含了示例代码、配置文件以及相关文档,用于演示如何整合CXF和Spring进行SOAP接口开发。通过研究这些示例,开发者可以更好地理解和实践上述知识...

    springboot-wsdl.java

    springboot调用webservice接口的两种方式,不使用axis

    php soap快速生成wsdl文件

    php实现soap服务快速生成wsdl的完整代码,包括客户端测试。前提是php支持soap扩展,soap的配置在此不涉及。 特别注意的一点是:soap服务端源码在 &lt;?php ... ?&gt; 之外不允许有任何空格或空行。

    (转)WebService之WSDL和SOAP实例(基于JAVA)

    【标题】"WebService之WSDL和SOAP实例(基于JAVA)"主要涵盖了两个核心概念:Web服务描述语言(WSDL)和简单对象访问协议(SOAP),这些都是在Java环境下实现Web服务的关键技术。 **Web服务描述语言(WSDL)** WSDL是...

    soap-spring-boot-cxf:用于使用Spring Boot,Apache CXF和JAX-WS生成和测试SOAP-WSDL驱动的服务的示例项目

    最大的变化是将其分为一个WSDL(仅作为SOAP接口)和一堆相互导入的XSD。 那应该代表一个更复杂的领域,尽管它们没有包含太多定义,但我可以更好地展示许多相关技术,这些技术通常出现在现实世界中。 因此,该示例...

    SoapUI测试工具WSDL文件生成--个人总结

    #### 二、什么是WSDL文件? WSDL(Web Services Description Language)是一种基于XML的语言,用于描述网络服务(如SOAP Web服务)的接口和消息格式。WSDL文件通常包含以下几部分: - **定义**:包括命名空间和导入...

    spring boot、eureka学习总结

    发布Web服务通常涉及WSDL(Web Service Description Language)文件的生成,Spring Boot可以通过配置自动暴露接口为Web服务。 接下来,Eureka是Netflix开发的服务注册与发现组件,它是Netflix OSS套件的一部分。在...

    springboot+axis1.4

    在IT行业中,Spring Boot是一个非常流行的Java框架,用于简化Spring应用程序的初始设置和日常开发工作。它通过自动配置和“起步依赖”使得开发者能够快速构建可独立运行的应用。而Axis1.4是Apache软件基金会的一个...

    WSDL样式详解,soap中Rpc和Document的区别

    在WSDL文档中,SOAP(Simple Object Access Protocol)绑定部分描述了如何将服务绑定到SOAP消息传递协议。SOAP绑定有两大数据样式:RPC(Remote Procedure Call)和Document。 1. RPC样式: - **RPC/Encoded**:此...

    soap+WSDL小实例

    SOAP(Simple Object Access Protocol)和WSDL(Web Services Description Language)是Web服务开发中的关键标准。本实例将探讨如何在契约优先的模式下使用这两者来实现一个小功能。 SOAP是一种XML(eXtensible ...

    soap服务器配制和WSDL文件的生成,生成WSDL文件的bat命令的编写,加soap相关的包

    本文将详细讲解如何配置SOAP服务器以及生成WSDL(Web Services Description Language)文件,同时会提及如何编写生成WSDL文件的批处理命令,并介绍所需的相关包。 第一步:理解SOAP服务器配置 SOAP服务器是提供Web...

    webservice soap wsdl

    "webservice soap wsdl" Web Service 是一种网络接口,为应用程序提供了交互和分布式处理的效果,与平台、开发语言无关。Web Service 的核心是 WSDL(Web Services Description Language),它是一种用于描述 Web ...

Global site tag (gtag.js) - Google Analytics