• 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>

    文档结构图:

  • 相关阅读:
    推荐前端开发使用的服务器环境开源项目 D2Server 可替代Apache
    JavaScript正则表达式的坑很深
    NodeJS + Sequelize + Mysql + Vue + Bootstrap
    wampserver使用过程中遇到的问题及相关配置
    生成解决方案时,无法导入以下密钥文件
    使用Image.GetThumbnailImage 方法返回缩略图
    C#操作xml文件进行增、删、改
    MessageBox.Show()时MessageBoxIcon的显示
    通过反射获取对象属性、属性的值,设置对象属性的值
    常用文档处理技巧
  • 原文地址:https://www.cnblogs.com/yangh965/p/5046841.html
Copyright © 2020-2023  润新知