最近项目中需要将原来的通信协议改成webservice,由于业务需要,我们需要向server端传送数据,故server方提供给我们一个.wsdl文件,内容如下:

WSDL即Web Services Description Language

<?xml version="1.0" encoding="UTF-8" ?>
<definitions targetNamespace="http://www.zhukejia.com"
 xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soapenc12="http://www.w3.org/2003/05/soap-encoding"
 xmlns:tns="http://www.zhukejia.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap11="http://schemas.xmlsoap.org/soap/envelope/"
 xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc11="http://schemas.xmlsoap.org/soap/encoding/"
 xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
 <types>
  <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
   attributeFormDefault="qualified" elementFormDefault="qualified"
   targetNamespace="http://www.zhukejia.com">
   <xsd:element name="getReader">
    <xsd:complexType>
     <xsd:sequence>
      <xsd:element maxOccurs="1" minOccurs="1" name="in0"
       nillable="true" type="xsd:string" />
     </xsd:sequence>
    </xsd:complexType>
   </xsd:element>
   <xsd:element name="getReaderResponse">
    <xsd:complexType>
     <xsd:sequence>
      <xsd:element maxOccurs="1" minOccurs="1" name="out"
       nillable="true" type="xsd:string" />
     </xsd:sequence>
    </xsd:complexType>
   </xsd:element>
  </xsd:schema>
 </types>
 <message name="getReaderRequest">
  <part name="parameters" element="tns:getReader" />
 </message>
 <message name="getReaderResponse">
  <part name="parameters" element="tns:getReaderResponse" />
 </message>
 <portType name="CallRequsetPortType">
  <operation name="getReader">
   <input name="getReaderRequest" message="tns:getReaderRequest" />
   <output name="getReaderResponse" message="tns:getReaderResponse" />
  </operation>
 </portType>
 <binding name="CallRequsetHttpBinding" type="tns:CallRequsetPortType">
  <wsdlsoap:binding style="document"
   transport="http://schemas.xmlsoap.org/soap/http" />
  <operation name="getReader">
   <wsdlsoap:operation soapAction="" />
   <input name="getReaderRequest">
    <wsdlsoap:body use="literal" />
   </input>
   <output name="getReaderResponse">
    <wsdlsoap:body use="literal" />
   </output>
  </operation>
 </binding>
 <service name="CallRequset">
  <port name="CallRequsetHttpPort" binding="tns:CallRequsetHttpBinding">
   <wsdlsoap:address location="http://132.120.115.23:7003//cxf/CallRequset" />
  </port>
 </service>
</definitions>

如文件所示,整个wsdl文件主要由红色标记的及部分组成:

一.声明

<?xml version="1.0" encoding="UTF-8" ?>

二.定义<definitions>

所有WSDL文档的根元素都是definition元素,definitions元素中一般包括若干个XML命名空间.

三. <types>

types元素用作一个容器,定义了自定义的特殊数据类型,在声明消息部分(有效负载)的时候,messages定义使用了types元素中定义的数据类型与元素。

四.<message>

Message元素描述了Web服务的有效负载。相当于函数调用中的参数和返回值。本例中对应getReaderRequest和getReaderResponse,其中每一个输入或者输出使用part元素定义

五.<portType>

<portType name="CallRequsetPortType">
  <operation name="getReader">
   <input name="getReaderRequest" message="tns:getReaderRequest" />
   <output name="getReaderResponse" message="tns:getReaderResponse" />
  </operation>
 </portType>

其中name="CallRequsetPortType"指定了Web服务的抽象接口,本例中对应的便是CallRequsetPortType.java,该接口中的抽象方法就是我们对应要实现的server端的方法。本例中对应的名字是getReader

六.<binding>

Binding元素将一个抽象的portType映射到一组具体的协议(SOAP或者HTTP)、消息传递样式(RPC或者document)以及编码样式(literal或者SOAP encoding)。
 Binding类似于将接口或者函数的调用绑定到某种协议上:例如CORBA、COM或者RPC的方式,这里使用SOAP协议。

七.<service>

Service元素包含一个或者多个Port元素

每一个Port元素对应一个不同的Web服务,port将一个URL赋予一个特定的binding,通过location实现

可以使两个或者多个port元素将不同的URL赋给相同的binding,例如负载平衡和容错的时候,使用这种方法。

wsdlsoap:address:将Internet地址通过location属性赋予一个SOAP绑定。

具体分析wsdl文件过程请参考下面截图:

另外:WSDL支持 4 种消息交换方式:(本文采用的是请求响应(Request-response))

1)单向(One-way):服务端接收消息;

2)请求响应(Request-response):服务端点接收请求消息,然后发送响应消息;

3)要求应答(Solicit-response):服务访问端发送要求消息,然后接收应答消息。

4)通知(Notification):服务访问端点发送通知消息。

webservice之wsdl的更多相关文章

  1. [Java] webservice soap,wsdl 例子

    java 调用webservice的各种方法总结 现在webservice加xml技术已经逐渐成熟,但要真正要用起来还需时日!! 由于毕业设计缘故,我看了很多关于webservice方面的知识,今天和 ...

  2. Webservice、WSDL三种服务访问的方式【转】

    http://www.cnblogs.com/yongfeng/archive/2013/01/30/2883146.html 用soapUI试了下wsdl的测试,但还是不知道webService和W ...

  3. 浅淡Webservice、WSDL三种服务访问的方式(附案例)

    Webservice Webservice是使应用程序以与平台和编程语言无关的方式进行相互通信技术. eg:站点提供访问的数据接口:新浪微博.淘宝. 官方解释:它是一种构建应用程序的普遍模型,可以在任 ...

  4. webservice接口测试wsdl,参数是xml格式。python,入参转化成str,返回值转化成dict调用

    1.用SoapUI测试webservice接口,传入参数是xml格式时.xml格式需要将xml的外围增加<![CDATA[xml]]> 2.但是用python去做webservice测试, ...

  5. delphi 调用Webservice 引入wsdl 报错 document empty

    delphi 调用Webservice 引入wsdl 报错 document empty 直接引入wsdl 地址报错 document empty 解决办法:在浏览器里保存为xml文件,然后在开发环境 ...

  6. cxf webservice 生成wsdl方法参数名称为arg0问题

    在通过cxf生成webservice服务时,如果你是用ServerFactoryBean,那么在生成wsdl时,方法的参数名称会被自动命名为arg0,arg1...,如: <xsd:comple ...

  7. cxf WebService设置wsdl中soapAction的值

    用cxf开发一个WebService很简单,只需要下面几步: 1.定义接口 public interface HelloService { String hello(); } 2.实现 public ...

  8. 彻底理解webservice SOAP WSDL

    WebServices简介 先给出一个概念 SOA ,即Service Oriented Architecture ,中文一般理解为面向服务的架构, 既然说是一种架构的话,所以一般认为 SOA 是包含 ...

  9. 理解WebService SOAP WSDL

    WebServices简介 先给出一个概念 SOA ,即Service Oriented Architecture ,中文一般理解为面向服务的架构, 既然说是一种架构的话,所以一般认为 SOA 是包含 ...

  10. webservice 的wsdl文件生成客户端java类

    提供两个方法: 第一个: 发布webservice项目后, 地址栏地址  http://localhost:8888/lxitedu.webservice.cxf-ch2/services/userS ...

随机推荐

  1. java进制转换代码

    定义十进制的数直接写,定义8进制的数以0开头,定义二进制的数以0b开头,定义十六进制的数以0x开头需要将十进制的数以二进制的数表示出来可以参照下例: int a = 10; System.out.pr ...

  2. Wireshark无法解析OpenFlow配置协议 解决方法

    在使用wireshark对OpenFlow交换机与FlowVisor的通信过程进行抓包分析的时候,在其选项中有openflow_v1选项,但Wireshark竟无法解析OpenFlow协议. 在查阅相 ...

  3. Intellij IDEA 使用spring-boot-devtools无效解决办法一

    Intellij IDEA 使用spring-boot-devtools maven依赖 ``` <dependency> <groupId>org.springframewo ...

  4. RabbitMQ入门_05_多线程消费同一队列

    A. 多线程消费同一队列 参考资料:https://www.rabbitmq.com/tutorials/tutorial-two-java.html 消费一条消息往往比产生一条消息慢很多,为了防止消 ...

  5. TPCx-BB源码分析

    Copy from: 一篇文章看懂TPCx-BB(大数据基准测试工具)源码 TPCx-BB是大数据基准测试工具,它通过模拟零售商的30个应用场景,执行30个查询来衡量基于Hadoop的大数据系统的包括 ...

  6. lambda表达式/对象引用计数

    ★lambda表达式的用法例:I=[(lambda x: x*2),(lambda y: y*3)]调用:for x in I: print x(2)输出:4,6 ★获取对象的引用次数sys.getr ...

  7. FastJson之JsonObject, JsonString, JavaBean,List快速转换

    // 将json字符串转换为json对象 JSONObject jsonObject = JSON.parseObject(jsonStr); // {"retState":&qu ...

  8. 2018年全国多校算法寒假训练营练习比赛(第一场)G 圆圈

    https://www.nowcoder.com/acm/contest/67/G 思路: 分形. 记录中间左边点的坐标,然后推出另外3个点的坐标,递归到最简单的情况. 代码: #include< ...

  9. Unity中使用的一套敏感词过滤方式

    当项目中的敏感词数量不是很多的时候,直接用数组来遍历过滤其实也可以,但是具体的数量有多大,这个肯定不好说,因此,对.txt中的敏感词合理组织后再进行过滤就显得非常有必要了. 如上图,左边是txt中配置 ...

  10. C# ref和out的本质

    ref和out参数的效果一样,都是通过关键字找到定义在主函数里面的变量的内存地址,并通过方法体内的语法改变它的大小.不同点就是输出参数必须对参数进行初始化.输出参数和引用参数的区别:从CLR的角度来看 ...