WSDL文档深入分析

借助jdk的wsimort.exe工具生成客户端代码 格式:wsimport -keep url   //url为wsdl文件的路径

直接生成客户端代码会抛异常, 无法生成客户端代码, 解决办法:

  1. 将对应的wsdl文档保存到本地
  2. 修改wsdl文档的部分内容:

 <s:element ref="s:schema" /><s:any /> 替换成 <s:any minOccurs="2" maxOccurs="2"/>

备注: 这个是Java调用net的webservice都有的问题

<?xml version=‘1.0‘ encoding=‘UTF-8‘?>
<wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    xmlns:tns="http://ws.day01_ws.atguigu.com/"
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:ns1="http://schemas.xmlsoap.org/soap/http"
    name="HelloWSImplService"
    targetNamespace="http://ws.day01_ws.atguigu.com/">
    <!--
        types
            schema : 定义了一些标签结构
     -->
    <wsdl:types>
        <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
            xmlns:tns="http://ws.day01_ws.atguigu.com/" elementFormDefault="unqualified"
            targetNamespace="http://ws.day01_ws.atguigu.com/" version="1.0">

            <!--
                //用于请求
                <sayHello>
                    <arg0>string</arg0>
                </sayHello>
                    <q0:sayHello>
                        <arg0>BB</arg0>
                    </q0:sayHello>

                //用于响应
                <sayHelloResponse>
                    <return>string</return>
                </sayHelloResponse>
                    <ns2:sayHelloResponse">
                        <return>Hello BB</return>
                    </ns2:sayHelloResponse>
             -->

            <xs:element name="sayHello" type="tns:sayHello" />
            <xs:element name="sayHelloResponse" type="tns:sayHelloResponse" />
            <xs:complexType name="sayHello">
                <xs:sequence>
                    <xs:element minOccurs="0" name="arg0" type="xs:string" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="sayHelloResponse">
                <xs:sequence>
                    <xs:element minOccurs="0" name="return" type="xs:string" />
                </xs:sequence>
            </xs:complexType>
        </xs:schema>
    </wsdl:types>

    <!--
        message: 用来定义消息的结构   soap消息
            part : 指定引用types中定义的标签片断
     -->

    <wsdl:message name="sayHelloResponse">
        <wsdl:part element="tns:sayHelloResponse" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="sayHello">
        <wsdl:part element="tns:sayHello" name="parameters">
        </wsdl:part>
    </wsdl:message>

    <!--
        portType: 用来定义服务器端的SEI
            operation : 用来指定SEI中的处理请求的方法
                input : 指定客户端应用传过来的数据, 会引用上面的定义的<message>
                output : 指定服务器端返回给客户端的数据, 会引用上面的定义的<message>
     -->
    <wsdl:portType name="HelloWS">
        <wsdl:operation name="sayHello">
            <wsdl:input message="tns:sayHello" name="sayHello">
            </wsdl:input>
            <wsdl:output message="tns:sayHelloResponse" name="sayHelloResponse">
            </wsdl:output>
        </wsdl:operation>
    </wsdl:portType>

    <!--
        binding : 用于定义SEI的实现类
            type属性: 引用上面的<portType>
            <soap:binding style="document"> : 绑定的数据是一个document(xml)
            operation : 用来定义实现的方法
                <soap:operation style="document" /> 传输的是document(xml)
                input: 指定客户端应用传过来的数据
                    <soap:body use="literal" /> : 文本数据
                output : 指定服务器端返回给客户端的数据
                    <soap:body use="literal" /> : 文本数据
     -->

    <wsdl:binding name="HelloWSImplServiceSoapBinding" type="tns:HelloWS">
        <soap:binding style="document"
            transport="http://schemas.xmlsoap.org/soap/http" />
        <wsdl:operation name="sayHello">
            <soap:operation soapAction="" style="document" />
            <wsdl:input name="sayHello">
                <soap:body use="literal" />
            </wsdl:input>
            <wsdl:output name="sayHelloResponse">
                <soap:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>

    <!--
        service : 一个webservice的容器
            name属性: 它用一指定客户端容器类
            port : 用来指定一个服务器端处理请求的入口(就SEI的实现)
                binding属性: 引用上面定义的<binding>
                address : 当前webservice的请求地址
     -->
    <wsdl:service name="HelloWSImplService">
        <wsdl:port binding="tns:HelloWSImplServiceSoapBinding" name="HelloWSImplPort">
            <soap:address location="http://192.168.10.165:8888/day01_ws/hellows" />
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>

总体就是下面这个结构:


<definitions>

              <types>

                     <schema>

                            <element>

              </types>

              <message>

                     <part>

</message>

              <portType>

                     <operation>

                            <input>

                            <output>

</portType>

              <binding>

                     <operation>

                            <input>

                            <output>

</binding>

              <service>

                     <port>

                            <address>

</service>

</definitions>

文档结构图:

时间: 2024-10-27 08:14:59

WSDL文档深入分析的相关文章

谈谈WebService开发-应用篇(三)-教你如何看WSDL文档

作为webservice客户端开发,在日常工作中可能经常会拿到一个对方提供的wsdl地址或文档,那么拿到这个地址后我们如何编写客户端调用代码呢,前面几篇只是以个人经验的方式写了下,那么真正要根据wsdl文档来编写客户端调用代码就必须学会看懂wsd文档.下面就结合之前的demo来深入剖析下wsdl文档,最后以图解的方式形象说明下. 本文以之前的SayHello的Demo来深入分析下wsdl文档的几个部分,个人认为可以共分6部分,下面分别介绍: <definitions/> 这部分在基础篇里已经介

webService之wsdl文档

WSDL概述        WebServices Description Language (WSDL Web服务语言)是一个用于精确描述Web Service的文档格式.        WSDL非常适合于用作代码生成器,它能够读取WSDL文档,并且可以为访问Web服务生成一个程序化的接口,大多数软件供应商和主要的标准机构(包括 W3C.WS-I和OASIS)都支持WSDL.例如:JAX-RPC provider(例如:BEA Weblogic)通过API用WSDL生成相应的占位程序:IBM

【Web Service】WSDL文档

WSDL文档仅仅是一个简单的XML文档. 它包含一系列描述某个web service的定义. WSDL WSDL 是基于 XML 的语言,用于描述 Web services 以及如何访问它们. WSDL 可描述某个 web service,连同用于此 web service 的消息格式和协议细节. Web Services Web services 可把应用程序转换为网络应用程序(web-applications). 通过使用 XML,消息可在应用程序之间进行传送. [Web Service]W

WSDL 文档解析

学习webservice,就离不了WSDL文档,他是我们开发WebService的基础,虽说,现在现在有许多WebService的开源框架使得我们可以根据WSDL生成客户端代码,但是,了解WSDL文档的结构还是有必要的.闲话不多说,我们开始进入正题. 首先,我们看一份WSDL文档. This XML file does not appear to have any style information associated with it. The document tree is shown b

wsdl文档分析

<?xml version="1.0" encoding="UTF-8"?> <definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2=&qu

WSDL文档框架

API的文档自动生成——基于CDIF的SOA基本能力

当前,作为大部分移动app和云服务后台之间的标准连接方式,REST API已经得到了绝大部分开发者的认可和广泛的应用.近年来,在新兴API经济模式逐渐兴起,许多厂商纷纷将自己的后台业务能力作为REST API开放出来,给更广泛的第三方开发者使用. 但是,管理REST API并非是一件容易的工作.由于缺乏有效的接口数据schema约束,加上设计REST API时resource endpoint的安排,以及发送http请求的方式又都五花八门,REST API开发完成后,大多数情况下API开发者仍然

Core Web API上使用Swagger提供API文档

在ASP.NET Core Web API上使用Swagger提供API文档 我在开发自己的博客系统(http://daxnet.me)时,给自己的RESTful服务增加了基于Swagger的API文档功能.当设置IISExpress的默认启动路由到Swagger的API文档页面后,在IISExpress启动Web API站点后,会自动重定向到API文档页面,非常方便.这不仅让我能够快速省查API设计的合理性,同时从API的使用角度也为我自己提供了便捷.下图就是我的博客系统RESTful API

文档型信息交互设计及相关技术实现

本文信息交互是指办公和经营管理活动中所产生的公众或定向业务信息,以及在信息共享过程中,以业务规则形式衍生出的评论.评价.回复.转发等业务信息延续. 信息交互设计目标 共享业务信息,并支持限定范围 共享的业务信息,可以通过评论.评价.回复.转发等方式进行业务信息延续和推广 把发布信息.延续信息功能设计为通用功能 以信息实例为基本文档单元,衍生信息为其子文档,存储在文档型数据库中(MongoDB) 信息展现形式灵活多样,以模板形式为用提供应用选择 发布信息支持带格式文档,统一采用MarkDown编辑