wsdl_无锁队列 - CSDN
精华内容
参与话题
  • 什么是WSDL

    千次阅读 2018-01-30 11:58:53
    WSDL(网络服务描述语言,Web Services Description Language)是一门基于 XML 的语言,用于描述 Web Services 以及如何对它们进行访问。 wsdl:definitions name="nmtoken"? targetNamespace="uri"> import ...

    WSDL(网络服务描述语言,Web Services Description Language)是一门基于 XML 的语言,用于描述 Web Services 以及如何对它们进行访问。

    <wsdl:definitions name="nmtoken"? targetNamespace="uri">
    
        <import namespace="uri" location="uri"/> *
    
        <wsdl:documentation .... /> ?
    
        <wsdl:types> ?
            <wsdl:documentation .... /> ?
            <xsd:schema .... /> *
        </wsdl:types>
    
        <wsdl:message name="ncname"> *
            <wsdl:documentation .... /> ?
            <part name="ncname" element="qname"? type="qname"?/> *
        </wsdl:message>
    
        <wsdl:portType name="ncname"> *
            <wsdl:documentation .... /> ?
            <wsdl:operation name="ncname"> *
                <wsdl:documentation .... /> ?
                <wsdl:input message="qname"> ?
                    <wsdl:documentation .... /> ?
                </wsdl:input>
                <wsdl:output message="qname"> ?
                    <wsdl:documentation .... /> ?
                </wsdl:output>
                <wsdl:fault name="ncname" message="qname"> *
                    <wsdl:documentation .... /> ?
                </wsdl:fault>
            </wsdl:operation>
        </wsdl:portType>
    
        <wsdl:serviceType name="ncname"> *
            <wsdl:portType name="qname"/> +
        </wsdl:serviceType>
    
        <wsdl:binding name="ncname" type="qname"> *
            <wsdl:documentation .... /> ?
            <-- binding details --> *
            <wsdl:operation name="ncname"> *
                <wsdl:documentation .... /> ?
                <-- binding details --> *
                <wsdl:input> ?
                    <wsdl:documentation .... /> ?
                    <-- binding details -->
                </wsdl:input>
                <wsdl:output> ?
                    <wsdl:documentation .... /> ?
                    <-- binding details --> *
                </wsdl:output>
                <wsdl:fault name="ncname"> *
                    <wsdl:documentation .... /> ?
                    <-- binding details --> *
                </wsdl:fault>
            </wsdl:operation>
        </wsdl:binding>
    
        <wsdl:service name="ncname" serviceType="qname"> *
            <wsdl:documentation .... /> ?
            <wsdl:port name="ncname" binding="qname"> *
                <wsdl:documentation .... /> ?
                <-- address details -->
            </wsdl:port>
        </wsdl:service>
    
    </wsdl:definitions>

    WSDL 端口

    元素是最重要的 WSDL 元素。

    它可描述一个 web service、可被执行的操作,以及相关的消息。

    可以把 元素比作传统编程语言中的一个函数库(或一个模块、或一个类)。

    操作类型

    请求-响应是最普通的操作类型,不过 WSDL 定义了四种类型:
    类型 定义
    One-way 此操作可接受消息,但不会返回响应。
    Request-response 此操作可接受一个请求并会返回一个响应
    Solicit-response 此操作可发送一个请求,并会等待一个响应。
    Notification 此操作可发送一条消息,但不会等待响应。

    One-Way 操作

    一个 one-way 操作的例子:

    <message name="newTermValues">
      <part name="term" type="xs:string"/>
      <part name="value" type="xs:string"/>
    </message>
    
    <portType name="glossaryTerms">
      <operation name="setTerm">
        <input name="newTerm" message="newTermValues"/>
      </operation>
    </portType >

    在这个例子中,端口 “glossaryTerms” 定义了一个名为 “setTerm” 的 one-way 操作。

    这个 “setTerm” 操作可接受新术语表项目消息的输入,这些消息使用一条名为 “newTermValues” 的消息,此消息带有输入参数 “term” 和 “value”。不过,没有为这个操作定义任何输出。
    Request-Response 操作

    一个 request-response 操作的例子:

    <message name="getTermRequest">
      <part name="term" type="xs:string"/>
    </message>
    
    <message name="getTermResponse">
      <part name="value" type="xs:string"/>
    </message>
    
    <portType name="glossaryTerms">
      <operation name="getTerm">
        <input message="getTermRequest"/>
        <output message="getTermResponse"/>
      </operation>
    </portType>

    在这个例子中,端口 “glossaryTerms” 定义了一个名为 “getTerm” 的 request-response 操作。

    最近在和一家公司做业务接口对接,由他们那边回调我们这边,对方直接扔过来一个webservice的wsdl文件,让我们按照他们的规范来做webservice服务,
    大多数的对接应该是我们创建完服务端的webservice服务,让其他公司根据我们的wsdl文件去开发客户端,但是,大公司就是这样,必须要按照他们的规范来。
    那问题来了,怎么根据wsdl文件创建服务端呢?
    查看wsdl文件的顺序是从下往上这里写图片描述

    请大家铭记查看wsdl文件的顺序是从下往上看的,不然,你会看懵逼的。
    第一步:确定接口的名称
    这里写图片描述
    service节点上的name属性值就是这个接口类的名称;
    这里写图片描述
    也就是说如果你要根据wsdl文件创建服务端的话就需要你去创建一个名字为:IHelloWord的接口。
    第二步:确定接口中都有哪些方法以及方法的名称
    这里写图片描述
    找binding节点下的operation子节点中的name属性值
    这里写图片描述
    一个operation节点就代码一个方法,也就是在接口中声明几个方法。
    第三步:确定接口中方法的参数类型,顺序
    假设我要找sayHello方法的参数类型和顺序;
    1:找出binding节点对应的porttype节点
    这里写图片描述
    2:找出porttype中每一个operation中的input和output对应的message
    这里写图片描述
    3:找到message中对应
    这里写图片描述

    从上面圈住的部分可以看出来:
    sayHello方法有两个参数,第一个参数的类型为String,第二个参数的类型为int。
    可以对比一下接口中的方法:
    第四步:找出这个服务类中方法的返回值类型
    1:找出这个方法所在的porttype节点
    这里写图片描述
    2:找出这个porttype中operation中的output指向的message节点
    这里写图片描述
    3:找到tyeps节点下name属性值为sayHelloResponse的element节点
    这里写图片描述

    从上图中圈住的部分就可以看出,这个返回值为String类。
    对比java代码;
    第五步:确定对外提供服务的url地址
    这里写图片描述
    service中的address节点中有一个location的地址就是对外提供调用的地址
    这里写图片描述
    这里的url的第一级目录和二级目录会影响我们的配置;
    一级目录影响的是:web.xml中监听器的匹配规则
    这里写图片描述
    二级目录影响的是:注册webservice服务的时候指定的名称
    这里写图片描述

    展开全文
  • WebService中的WSDL详细解析

    万次阅读 多人点赞 2019-03-06 17:19:08
    WebService中的WSDL详解 有人在WebService开发的时候,特别是和第三方有接口的时候,走的是SOAP协议,然后用户(或后台)给你一个WSDL文件(或网址),说按照上面的进行适配, 这时就要对WebService的WSDL有一定的...

    WebService中的WSDL详解

           有人在WebService开发的时候,特别是和第三方有接口的时候,走的是SOAP协议,然后用户(或后台)给你一个WSDL文件(或网址),说按照上面的进行适配, 这时就要对WebService的WSDL有一定的理解,本文将对WSDL(WebService描述语言)进行详细总结。 
           WSDL (Web Services Description Language,Web服务描述语言)是一种XML Application,他将Web服务描述定义为一组服务访问点,客户端可以通过这些服务访问点对包含面向文档信息或面向过程调用的服务进行访问(类似远程过程调用)。WSDL首先对访问的操作和访问时使用的请求/响应消息进行抽象描述,然后将其绑定到具体的传输协议和消息格式上以最终定义具体部署的服务访问点。相关的具体部署的服务访问点通过组合就成为抽象的Web服务。

    一.WSDL的基本概念

           WSDL是一个用于精确描述Web服务的文档,WSDL文档是一个遵循WSDL-XML模式的XML文档。WSDL 文档将Web服务定义为服务访问点或端口的集合。在 WSDL 中,由于服务访问点和消息的抽象定义已从具体的服务部署或数据格式绑定中分离出来,因此可以对抽象定义进行再次使用。消息,指对交换数据的抽象描述;而端口类型,指操作的抽象集合。用于特定端口类型的具体协议和数据格式规范构成了可以再次使用的绑定。将Web访问地址与可再次使用的绑定相关联,可以定义一个端口,而端口的集合则定义为服务。 
           一个WSDL文档通常包含8个重要的元素,即definitions、types、import、message、portType、operation、binding、service元素。这些元素嵌套在definitions元素中,definitions是WSDL文档的根元素。 
    WSDL文档外层结构图示: 
    w

    WSDL 服务进行交互的基本元素: 
    Types(消息类型):数据类型定义的容器,它使用某种类型系统(如 XSD)。 
    Message(消息):通信数据的抽象类型化定义,它由一个或者多个 part 组成。 
    Part:消息参数 
    PortType(端口类型):特定端口类型的具体协议和数据格式规范。,它由一个或者多个 Operation组成。 
    Operation(操作):对服务所支持的操作进行抽象描述,WSDL定义了四种操作: 
    1.单向(one-way):端点接受信息; 
    3.要求-响应(solicit-response):端点发送消息,然后接受相关消息; 
    4.通知(notification[2] ):端点发送消息。

    Binding:特定端口类型的具体协议和数据格式规范。 
    Port:定义为绑定和网络地址组合的单个端点。 
    Service:相关端口的集合,包括其关联的接口、操作、消息等。 
    外层结构里面也可能有多层结构。

    二.WSDL的基本结构详解

    下面通过一份wsdl文档,来详细解读WSDL结构:

     <?xml version="1.0" encoding="UTF-8" ?>
    <wsdl:definitions
        targetNamespace="http://com.liuxiang.xfireDemo/HelloService"
        xmlns:tns="http://com.liuxiang.xfireDemo/HelloService"
        xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
        xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xmlns:soapenc11="http://schemas.xmlsoap.org/soap/encoding/"
        xmlns:soapenc12="http://www.w3.org/2003/05/soap-encoding"
        xmlns:soap11="http://schemas.xmlsoap.org/soap/envelope/"
        xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
        <wsdl:types>
            <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                attributeFormDefault="qualified" elementFormDefault="qualified"
                targetNamespace="http://com.liuxiang.xfireDemo/HelloService">
                <xsd:element name="sayHello">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element maxOccurs="1" minOccurs="1"
                                name="name" nillable="true" type="xsd:string" />
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
                <xsd:element name="sayHelloResponse">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element maxOccurs="1" minOccurs="0"
                                name="return" nillable="true" type="xsd:string" />
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
            </xsd:schema>
        </wsdl:types>
        <wsdl:message name="sayHelloResponse">
            <wsdl:part name="parameters" element="tns:sayHelloResponse" />
        </wsdl:message>
        <wsdl:message name="sayHelloRequest">
            <wsdl:part name="parameters" element="tns:sayHello" />
        </wsdl:message>
        <wsdl:portType name="HelloServicePortType">
            <wsdl:operation name="sayHello">
                <wsdl:input name="sayHelloRequest"
                    message="tns:sayHelloRequest" />
                <wsdl:output name="sayHelloResponse"
                    message="tns:sayHelloResponse" />
            </wsdl:operation>
        </wsdl:portType>
        <wsdl:binding name="HelloServiceHttpBinding"
            type="tns:HelloServicePortType">
            <wsdlsoap:binding style="document"
                transport="http://schemas.xmlsoap.org/soap/http" />
            <wsdl:operation name="sayHello">
                <wsdlsoap:operation soapAction="" />
                <wsdl:input name="sayHelloRequest">
                    <wsdlsoap:body use="literal" />
                </wsdl:input>
                <wsdl:output name="sayHelloResponse">
                    <wsdlsoap:body use="literal" />
                </wsdl:output>
            </wsdl:operation>
        </wsdl:binding>
        <wsdl:service name="HelloService">
            <wsdl:port name="HelloServiceHttpPort"
                binding="tns:HelloServiceHttpBinding">
                <wsdlsoap:address
                    location="http://localhost:8080/xfire/services/HelloService" />
            </wsdl:port>
        </wsdl:service>
    </wsdl:definitions>
    

    (一) definitions元素

           所有的WSDL文档的根元素均是definitions元素。该元素封装了整个文档,同时通过其name提供了一个WSDL文档。除了提供一个命名空间(targetNamespace)外,该元素没有其他作用,故不作详细描述。

    (二)types元素

           WSDL采用了W3C XML模式内置类型作为其基本类型系统。types元素用作一个容器,用于定义XML模式内置类型中没有描述的各种数据类型(不太明白:XML模式内置类型中没有描述的各种数据类型)。当声明消息部分的有效时,消息定义使用了在types元素中定义的数据类型和元素。在本文的WSDL文档中的types定义:

    <wsdl:types>
            <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                attributeFormDefault="qualified" elementFormDefault="qualified"
                targetNamespace="http://com.liuxiang.xfireDemo/HelloService">
                <xsd:element name="sayHello">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element maxOccurs="1" minOccurs="1"
                                name="name" nillable="true" type="xsd:string" />
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
                <xsd:element name="sayHelloResponse">
                    <xsd:complexType>
                        <xsd:sequence>
                              <xsd:element maxOccurs="1" minOccurs="0"
                                name="return" nillable="true" type="xsd:string" />
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
            </xsd:schema>
        </wsdl:types>
    

           上面是数据定义部分,该部分定义了两个元素,一个是sayHello,一个是sayHelloResponse: 
           sayHello:定义了一个复杂类型,仅仅包含一个简单的字符串,将来用来描述操作的参入传入部分; 
           sayHelloResponse:定义了一个复杂类型,仅仅包含一个简单的字符串,将来用来描述操作的返回值; 
           这里sayHelloResponse是和sayHello相关的,sayHello相对于一个方法,里面的: type=”xsd:string”,name=”name”,是确定传入name的参数是String类型的,而sayHelloResponse中的 name=”return” type=”xsd:string” 是确定方法sayHello(String name)返回的类型是String类型的。

    (三)import元素

           import元素使得可以在当前的WSDL文档中使用其他WSDL文档中指定的命名空间中的定义元素。本例子中没有使用import元素。通常在用户希望模块化WSDL文档的时候,该功能是非常有效果的。 
    import的格式如下:

    <wsdl:import namespace="http://xxx.xxx.xxx/xxx/xxx" location="http://xxx.xxx.xxx/xxx/xxx.wsdl"/>
    

    必须有namespace属性和location属性: 
    1.namespace属性:值必须与正导入的WSDL文档中声明的targetNamespace相匹配; 
    2.location属性:必须指向一个实际的WSDL文档,并且该文档不能为空。

    (四)message元素

           message元素描述了Web服务使用消息的有效负载。message元素可以描述输出或者接受消息的有效负载;还可以描述SOAP文件头和错误detail元素的内容。定义message元素的方式取决于使用RPC样式还是文档样式的消息传递。在本文中的message元素的定义,本文档使用了采用文档样式的消息传递:

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

           该部分是消息格式的抽象定义:定义了两个消息sayHelloResponse和sayHelloRequest:

    1.sayHelloRequest:

    sayHello操作的请求消息格式,由一个消息片断组成,名字为parameters,元素是我们前面定义的types中的元素;

    2.sayHelloResponse:

    sayHello操作的响应消息格式,由一个消息片断组成,名字为parameters,元素是我们前面定义的types中的元素; 
            如果采用RPC样式的消息传递,只需要将文档中的element元素修改为type即可(??)。

    (五)portType元素

           portType元素定义了Web服务的抽象接口。该接口有点类似Java的接口,都是定义了一个抽象类型和方法,没有定义实现。在WSDL中,portType元素是由binding和service元素来实现的,这两个元素用来说明Web服务实现使用的Internet协议、编码方案以及Internet地址。 
    一个portType中可以定义多个operation,一个operation可以看作是一个方法,本文中WSDL文档的定义:

      <wsdl:portType name="HelloServicePortType">
            <wsdl:operation name="sayHello">
                <wsdl:input name="sayHelloRequest"
                    message="tns:sayHelloRequest" />
                <wsdl:output name="sayHelloResponse"
                    message="tns:sayHelloResponse" />
            </wsdl:operation>
        </wsdl:portType>
    

           portType定义了服务的调用模式的类型,这里包含一个操作sayHello方法,同时包含input和output表明该操作是一个请求/响应模式,请求消息是前面定义的sayHelloRequest,响应消息是前面定义的sayHelloResponse。input表示传递到Web服务的有效负载,output消息表示传递给客户的有效负载。 
           这里相当于抽象类中定义了一个抽象方法sayHello,而方法参数的定义和返回值的定义都是在types中设置的,方法名又是在message中定义有的。

    (六)binding

           binding元素将一个抽象portType映射到一组具体协议(SOAO和HTTP)、消息传递样式、编码样式。通常binding元素与协议专有的元素和在一起使用,本文中的例子:

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

           这部分将服务访问点的抽象定义与SOAP、HTTP绑定,描述如何通过SOAP/HTTP来访问按照前面描述的访问入口点类型部署的访问入口。 
    其中规定了在具体SOAP调用时,应当使用的soapAction是”xxx”,这个Action在WebService代码调用中是很重要的。具体的使用需要参考特定协议定义的元素。

    (七)service元素和port元素

           service元素包含一个或者多个port元素,其中每个port元素表示一个不同的Web服务。port元素将URL赋给一个特定的binding,甚至可以使两个或者多个port元素将不同的URL赋值给相同的binding。文档中的例子:

        <wsdl:service name="HelloService">
            <wsdl:port name="HelloServiceHttpPort"
                binding="tns:HelloServiceHttpBinding">
                <wsdlsoap:address
                    location="http://localhost:8080/xfire/services/HelloService" />
            </wsdl:port>
        </wsdl:service>
    

           对于这个WSDL文档的学习,第一次看是感觉非常陌生的,而且里面元素又多,学习的话先是要了解外层结构代表的意义和作用,然后理解里面的元素的意义和作用,有些元素作用不大,有些元素又是很关联的,有些元素是比较重要的。 
    WSDL图解: 
    t1

    t2

    展开全文
  • java根据WSDL文档,如何调用WebService?

    万次阅读 多人点赞 2018-05-14 17:02:08
    作为一个java开发人员,当我们获取到了对方提供的wsdl地址,然后在网页上能够访问wsdl文档以后,如何调用对方的webservic借口呢?一下有几种方法,可以参考一下。第一种是 HttpURLConnection方式第二种是 JSP页面...

    作为一个java开发人员,当我们获取到了对方提供的wsdl地址,然后在网页上能够访问wsdl文档以后,如何调用对方的webservic借口呢?


    一下有几种方法,可以参考一下。

    第一种是      HttpURLConnection方式

    第二种是      JSP页面上纯JS调用


    内容说明

    1、WSDL文档基本说明

    2、httpURLConnection方式调用

    3、JS方式调用

    4、获取的数据如何解析?


    1、WSDL文档基本说明

    接口文档如下:以下是公共对外开放的查询手机号归属地的一个借口文档:

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

    可以自己用浏览器打开访问一下;

    一眼望去,可能接口看起来很复杂,较为繁琐。  但是作为开发人员,使用的时候,  我们可以查看关注点信息,就能实现接口的调用了!!

    那么我们需要了解吗哪些信息呢?

    从上面的文档里面,我们需要从头部(最上面一行)了解到:

    系统的targetNamespace="http://WebXml.com.cn/"

    从<wsdl:types>标签里的<s:element ></s:element>的name=“xxxxxxx”,获知该文档提供了两个方法:

    getMobileCodeInfo、getDatabaseInfo(后面带Response的是对应方法的回复)

    从底部的<wsdl:service name="MobileCodeWS"></wsdl:service>标签里面,能获知<http:address location="http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx"/>请求地址。

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


    一般而言,知悉以上信息,你就能调用借口了。需要传参数调用的,可能在业务上需要与对方了解一下,参数的格式(数据类型,文档里是可以知晓的)



    2、httpURLConnection方式调用

    代码如下:

    package com.ssh.webserviceTSY;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.UnsupportedEncodingException;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    public class Test {
        public static void main(String[] args) throws IOException {  
            //第一步:创建服务地址  
            URL url = new URL("http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl");  
            //第二步:打开一个通向服务地址的连接  
            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("17321242779");  
            //将信息以流的方式发送出去
            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();  
        }  
    
    
        public static String getXML(String phone){  
        	
        	String soapXML = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"  
        	        +"<soap:Envelope xmlns:xsi=\"http://www.w3.org/2003/XMLSchema-instance\" " 
        			+"xmlns:web=\"http://WebXml.com.cn/\"  " 
        	        +"xmlns:xsd=\"http://www.w3.org/2003/XMLSchema\" " 
        			+"xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"  
        	            +"<soap:Body>"  
        	              +"<web:getMobileCodeInfo>"    
        	              +phone
        	              +"</web:getMobileCodeInfo>"  
        	            +"</soap:Body>"  
        	        +"</soap:Envelope>";  
            return soapXML;  
        }  
    }
    


    说明 :

    一般的HTTP请求大部分都是相同的,但是由于webservice是基于soap协议的,所以,请求时的文本格式需要设置好。

    文中的soapXML信息,需要注意xmlns:web=“tns” 这个xml命名空间, 这个空间是依据wsdl文档里的头部NameSpace信息,确定的

    程序会依据这个名称,检索到该文档里面的方法,譬如:

    <web: getDatabaseInfo> 获取getDatabaseInfo方法 (web是xmlns的名字,可以自定义,相当于“id”)


    3、JS方式调用


    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Test WebService</title>
    <script type="text/javascript" src="js/jquery-2.1.1.min.js"></script>
    <script>
    $(function(){
    	invoke();
    	back();
    });
    var xhr;
    function invoke(){
        if(window.ActiveXObject){
            xhr = new ActiveXObject("Microsoft.XMLHTTP");
        }else{
            xhr = new XMLHttpRequest();
        }
        //指定请求地址
        var url = "http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl";
        
        //定义请求类型和地址和异步,一般都是post方式。
        xhr.open("POST", url, true);
        //设置Content-Type
        xhr.setRequestHeader("Content-Type", "text/xml;charset=UTF-8");
        //指定回调方法
        xhr.onreadystatechange = back;
        //组装消息体的数据
        var data = 
        '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" '
        ' xmlns:web="http://WebXml.com.cn/" '
        ' xmlns:xsd="http://www.w3.org/2003/XMLSchema" '
        ' xmlns:xsi="http://www.w3.org/2003/XMLSchema-instance">'
        +'<soapenv:Body>'
        +'<web:getDatabaseInfo>'
        +'<data>'
        +'17321242719'
        +'</data>'
        +'</web:getDatabaseInfo>'
        +'</soapenv:Body>'
        +'</soapenv:Envelope>';
        xhr.send(data); 
    }
    function back(){
        if(xhr.readyState == 4){
            if(xhr.status == 200){
                var doc = xhr.responseXML;
                alert(xhr.getAllResponseHeaders());
              //  xhr.getResponseBodyAsStream
                alert(xhr.responseText);
                
            }
        }/* else{
        	alert("请求失败")
        } */
    }
    </script>
    </head>
    <body>
    </body>
    </html>




    展开全文
  • soap和wsdl区别说明

    千次阅读 2019-01-28 11:31:52
    WSDL提供“能办的事的文档说明”:对要提供的服务的一种描述格式。我想帮你的忙,但是我要告诉你我都能干什么,以及干这些事情需要的参数类型。 SOAP提供“请求”的规范:向服务接口传递请求的格式,包括方法和参数...

    Web Service实现业务诉求:Web Service是真正“办事”的那个,提供一种办事接口的统称。 WSDL提供“能办的事的文档说明”:对要提供的服务的一种描述格式。我想帮你的忙,但是我要告诉你我都能干什么,以及干这些事情需要的参数类型。 SOAP提供“请求”的规范:向服务接口传递请求的格式,包括方法和参数等。你想让人家办事,总得告诉人家你想干什么吧,SOAP就是定义这个“请求”的格式的,按照SOAP定义的“请求”格式“书写”请求就可以保证Web Service能够正确的解读你想让它干什么以及你为它提供了什么参数。在这个请求中,你需要描述的主要问题有:向哪个Web Service发送请求,请求的参数类型、参数值、返回值类型。这些都“填写”完毕,也就完成了符合SOAP规范的SOAP消息。

    wsdl和soap虽然是web service的两大标准,但是两者并没有必然的联系,都可以独立使用。


    wsdl提供了一个统一的接口,目前已经成为一个国际上公认的标准,通过wsdl提供的接口可以访问不同类型的资源(如java、c#、C、C、C++等),因为wsdl是基于xml,与语言平台无关的。另外wsdl提供了binding和service元素,用以绑定接口到具体的服务,实现了接口与实现的分离。

    soap(简单对象访问协议)是一种基于http的传输协议,用来访问远程服务


      wsdl与soap的关系在于:wsdl绑定服务的时候可以设定使用的协议,协议可以是soap、http、smtp、ftp等任何一种传输协议,除此以外wsdl还可以绑定jms、ejb及local java等等,不过都是需要对binding和service元素做扩展的,而且需要扩展服务器的功能以支持这种扩展

    soap协议是一种请求和应答协议规范而http是web传输协议,soap的传输是可以基于http的,但也可以基于其他的传输协议,如ftp、smtp等。

    简单对象访问协议(SOAP)是W3C组织的一个Note, 它描述了一种在分散的或分布式的环境中如何交换信息的轻量级协议。SOAP是一个基于XML的协议,它包括三个部分:SOAP封装(Envelop),封装定义了一个描述消息中的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理它们的框架;SOAP编码规则(Encoding Rules),用于表示应用程序需要使用的数据类型的实例;SOAP RPC表示(RPC Representation),表示远程过程调用和应答的协定;SOAP可以和多种传输协议绑定(Binding),使用底层协议交换信息。在这个文档中,目前只定义了SOAP如何和HTTP以及HTTP扩展进行绑定的框架。

    SOAP是个通信协议, SOAP在HTTP协议的基础上,把编写成XML的REQUEST参数, 放在HTTP BODY上提交个WEB SERVICE服务器(SERVLET,ASP什么的) 处理完成后,结果也写成XML作为RESPONSE送回用户端, 为了使用户端和WEB SERVICE可以相互对应,可以使用WSDL作为这种通信方式的描述文件,利用WSDL工具可以自动生成WS和用户端的框架文件,SOAP具备把复杂对象序列化捆绑到XML里去的能力。

    SOAP的前身是RPC, 就是远程呼叫处理的协议,这个协议安全性不是很好,多数防火墙都会阻挡RPC的通信包,而SOAP则使用HTTP协议作为基本的协议,使用端口80使得SOAP可以透过防火墙,完成RPC的功能。

    SOAP协议和HTTP协议一样,都是底层的通信协议,只是请求包的格式不同而已,SOAP包是XML格式的,现在我们编写WEB SERVICE不需要深入理解SOAP也没关系。如果SERVICE和CLIENT在同样的环境下使用SOAP,由于一般情况下都有自动生成SOAP程序框架的工具,因此不知道细节也没关系. 可是, 如果CLIENT和SERVICE的环境不同,比如说JAVA的Client和.NET的SERVICE进行通信,或者是VB CLIENT和TOMCAT下的JAVA SERVICE通信,还是要知道一点细节为好. 特别是, WSDL或者UDDI都不是标准,如果不让用就只好手工配制SOAP MESSAGE啦。

    原文转至:https://blog.csdn.net/Pautcher_0/article/details/6798351 

    展开全文
  • WSDL、详解

    千次阅读 2018-12-22 16:50:36
    WebService中的WSDL详解 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;有人在WebService开发的时候,特别是和第三方有接口的时候,走的是SOAP协议,然后...
  • WSDL文件详解

    千次阅读 2017-07-28 10:45:56
    WSDL文件详解   对于WSDL的初学者来说,在学习过WSDL的官方文档后,大概有种似懂非懂的感觉。随便拿一个WSDL,单个元素拆分开来能够看懂,合起来一整个文件就看不明白了。今天我就在这里把自己学习的WSDL做一个总结...
  • WSDL文件创建WebService服务

    千次阅读 2018-05-30 23:01:16
    在WebService服务对接中,经常遇到这样的情况,对方服务的wsdl文件以及接口文档已经拿到,但由于这样或那样的原因导致网络一直不通,并且由于项目比较急,为方便边开发边调试,一般解决方法是在己方测试环境部署一个...
  • WSDL中文版——详解

    千次阅读 2016-12-02 14:00:43
    为什么使用WSDL? 像Internet协议之类的标准有没有为权威所利用,或者人们这样看待它是因为顺之所获的好处远远超出了代价?曾经有许多试图建立的标准都流产了。有时候,那些还没有普遍使用的标准甚至由法令或政府...
  • WSDL详解

    万次阅读 2019-06-26 10:38:24
    原文链接:WebService中的WSDL详解 有人在WebService开发的时候,特别是和第三方有接口的时候,走的是SOAP协议,然后用户(或后台)给你一个WSDL文件(或网址),说按照上面的进行适配, 这时就要对WebService的...
  • C#.NET调用WSDL接口及方法

    万次阅读 2014-06-05 14:52:49
    1.首先需要清楚WSDL的引用地址  如:
  • JDK版本 Eclipse版本:Helios Service Release 2
  • 已有wsdl,怎么去调用他的方法

    万次阅读 2018-06-07 14:46:06
    1,在浏览器验证该wsdl地址是否可以打开,显示为该模式2,新建一个项目,右击该项目,other,webservice,webservice clent , 讲该wsdl地址输入,finish3,新建一个类,实例化impl,调用一个无参且返回该类得方法...
  • 生成WSDL文件的三种方法

    万次阅读 2010-04-27 16:19:00
    在.NET中有三种方式生成WSDL:1.在Web Service的URL后面加上WDSL需求,如下:http://localhost/webExamples/simpleService.asmx?WSDL2.使用disco.exe。在命令行中写下如下的命令:disco ...
  • JDK版本:1.7update65 Eclipse版本:3.7.2
  • WSDL文件生成

    千次阅读 2018-03-29 12:56:55
    先创建java工程,再src中的包里创建请求与响应,再创建java文件,生成wsdl文件根据java文件点击右键——》web services--》create web service,生成wsdl文件二.把生成的wsdl文件拷贝到目录下,生成服务端1. 根据...
  • wsdl文件是怎么生成的

    2016-09-26 11:41:53
    wsdl文件是在接口后加上?wsdl就可以自动生成吗?如果不是是手动写的还是怎么生成的。
  • 在MyEclipse中建立一个工程,例如建立一个名为wsdl2java的WEB工程。需要添加到WEB-INF/lib目录下的包如下所示: 将wsdl目录拷贝到工程目录,例如src/wsdl目录下。 根据wsdl文件生成对应的java类 选择新建的...
  • 公共接口:可供测试的在线...2. 首先用浏览器访问webservice的站点,接着保存打开的页面后缀为wsdl; 3. 在Eclipse中生成webservice客户端代码,new---->other---->webservice---->webserviceclient,选择之前拷贝到e
  • 使用eclipse根据wsdl生成客户端

    千次阅读 2018-03-07 17:31:47
    1.在需要生成的java项目右键new Web Service Client 。2.点击 Next。进入下面的界面:Service definition 可以是服务路径,也可以是wsdl文件路径。点击 Finish,生成代码如下:...
  • Caused by: javax.wsdl.WSDLException: WSDLException (at /soap:Envelope): faultCode=INVALID_WSDL: Expected element '{http://schemas.xmlsoap.org/wsdl/} WSDLExceptionfaultCode=INVALID_WSDL.   解决:
1 2 3 4 5 ... 20
收藏数 78,982
精华内容 31,592
关键字:

wsdl