webservice 之 WSDL的解析

先看一个wsdl,

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions xmlns:tns="http://ws.lk.com"
    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/" targetNamespace="http://ws.lk.com">
    <wsdl:types>
        <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            attributeFormDefault="qualified" elementFormDefault="qualified"
            targetNamespace="http://ws.lk.com">
            <xsd:element name="example">
                <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="exampleResponse">
                <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>
    </wsdl:types>
    <wsdl:message name="exampleRequest">
        <wsdl:part name="parameters" element="tns:example"></wsdl:part>
    </wsdl:message>
    <wsdl:message name="exampleResponse">
        <wsdl:part name="parameters" element="tns:exampleResponse"></wsdl:part>
    </wsdl:message>
    <wsdl:portType name="HelloWSsssPortType">
        <wsdl:operation name="example">
            <wsdl:input name="exampleRequest" message="tns:exampleRequest"></wsdl:input>
            <wsdl:output name="exampleResponse" message="tns:exampleResponse"></wsdl:output>
        </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="HelloWSsssHttpBinding" type="tns:HelloWSsssPortType">
        <wsdlsoap:binding style="document"
            transport="http://schemas.xmlsoap.org/soap/http" />
        <wsdl:operation name="example">
            <wsdlsoap:operation soapAction="" />
            <wsdl:input name="exampleRequest">
                <wsdlsoap:body use="literal" />
            </wsdl:input>
            <wsdl:output name="exampleResponse">
                <wsdlsoap:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:service name="HelloWSsss">
        <wsdl:port name="HelloWSsssHttpPort" binding="tns:HelloWSsssHttpBinding">
            <wsdlsoap:address location="http://localhost:8080/HelloWS/services/HelloWSsss" />
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>

首先通过MyEclipse 的 New web service 向导生成java代码,可以同时生成接口、实现类,然后访问http://localhost:8080/HelloWS/services/HelloWSsss?wsdl 得到的。

如果通过MyEclipse 的 MyEclipse WSDL Editor打开,则得到:

类似这样的图片,看到个很多次了,每次都是看不懂。。。 郁闷。 不过,其实要是稍微研究对应的.wsdl一下,则发现,它没那么的吓人。

基本结构就是:

wsdl:service  有wsdl:port 的子元素,wsdl:port 有子元素wsdlsoap:address 提供对外访问的url。 wsdl:port 同时由binding属性绑定了一个wsdl:binding 。

wsdl:binding 有type属性指定了wsdl:portType  ,wsdl:portType  包含子元素wsdl:operation ,wsdl:operation 的name属性指定了其对外提供的方法。

子元素wsdl:input 、wsdl:output  分部对应方法的参数、返回值。wsdl:input 、wsdl:output 的message属性指定了wsdl:message ,子元素wsdl:part 的element属性指定了

包含在wsdl:types中的xsd:element ,xsd:element 子子元素的type属性指定了 具体的数据类型。

这样的描述显得混乱,但是我不太会通过绘图来分析。先这样吧。

规律:

如果是通过New web service 向导生成的, 默认的各元素属性名字,非常有规律:

假设 ws 名字为

HelloWSsss ,那么 ——> binding="tns:HelloWSsssHttpBinding" -> type="tns:HelloWSsssPortType" -> wsdl:operation name="example"兵分两路:-> wsdl:input name="exampleRequest"   -> element="tns:example"-> wsdl:output name="exampleResponse" -> element="tns:exampleResponse" 

__ 就这样,注意到, input参数message名 为 exampleRequest ,到了element标签的时候,名字重新变回了 example, 当然,这个无关紧要,非常小的细节。。。

xsd:element -> wsdl:message  -> wsdl:portType  : wsdl:operation  -> input 、 output 两个 wsdl:message  -> 两个 xsd:element 

不搞了,反正已经完全不惧怕wsdl了!!

看到那样的图,也完全不用担心看不懂了! 其实很简单,只是wsdl 这样的格式把一个非常简单的ws描述的复杂起来,当然,这也可能是为了能够处理复杂问题,而逐渐完善起来的规范。。

webservice 之 WSDL的解析

时间: 2024-08-01 22:43:13

webservice 之 WSDL的解析的相关文章

java使用POST发送soap报文请求webservice返回500错误解析

本文使用JAX-WS2.2编译webservice,并使用HttpUrlConnection的POST方式对wsdl发送soap报文进行请求返回数据, 对错误Server returned HTTP response code: 500 的解决方法进行简单分析. 问题描述: 由于课程需要博主需要自己写一个webservice并且通过soap进行请求, 于是使用JAX-WS编译了下面java代码生成webservice服务 生成webservice的java代码: [java] view plai

Webservice soap wsdl的区别

Web Service完结业务诉求:Web Service是真实“就事”的那个,供给一种就事接口的总称.WSDL供给“能办的事的文档阐明”:对要供给的效劳的一种描绘格局.我想帮你的忙,但是我要通知你我都能干啥,以及干这些工作需求的参数类型.SOAP供给“恳求”的规范:向效劳接口传递恳求的格局,包括办法和参数等.你想让人家就事,总得通知人家你想干啥吧,SOAP即是界说这个“恳求”的格局的,按照SOAP界说的“恳求”格局“书写”恳求就能够确保Web Service能够正确的解读你想让它干啥以及你为它

WSDL实例解析

WSDL的主要文档元素 WSDL文档可以分为两部分.顶部分由抽象定义组成,而底部分则由具体描述组成.抽象部分以独立于平台和语言的方式定义SOAP消息,它们并不包含任何随 机器或语言而变的元素.这就定义了一系列服务,截然不同的应用都可以实现.具体部分,如数据的序列化则归入底部分,因为它包含具体的定义.在上述的文档元 素中,<types>.<message>.<portType>属于抽象定义 层,<binding>.<service>属于具体定义层.

【WebService】wsdl配置详解以及使用注解修改wsdl配置

WebService系列文章: [WebService]带你走进webservice的世界 [WebService]自定义WebService服务及其调用 前面分析了一下关于ws的基本知识,我们知道,wsdl是ws中很重要的文档,我们可以通过解析该wsdl文档获取ws的相关信息,其实,如果不了解该文档结构的话,问题也不大,只要会解析即可进行开发.但是如果想要生成一个符合自己项目的,或者比较人性化的一个wsdl的话,或者从可读性角度来说,就需要在编写ws代码时进行一些相应的配置了,比如说ws名称,

【&#127568;】 彻底理解webservice SOAP WSDL

原文: http://wenku.baidu.com/view/f87b55f19e31433239689314.html WebServices简介 先给出一个概念 SOA ,即Service Oriented Architecture ,中文一般理解为面向服务的架构, 既然说是一种架构的话,所以一般认为 SOA 是包含了运行环境,编程模型, 架构风格和相关方法论等在内的一整套新的分布式软件系统构造方法和环境, 涵盖服务的整个生命周期.而在 SOA 的架构风格中,服务是最核心的抽象手段. SO

彻底理解webservice SOAP WSDL

WebServices简介 先给出一个概念 SOA ,即Service Oriented Architecture ,中文一般理解为面向服务的架构, 既然说是一种架构的话,所以一般认为 SOA 是包含了运行环境,编程模型, 架构风格和相关方法论等在内的一整套新的分布式软件系统构造方法和环境, 涵盖服务的整个生命周期.而在 SOA 的架构风格中,服务是最核心的抽象手段. SOA 中的服务是构建在一些列基于开放标准的基础之上的, Web 服务定义了如何在异构系统之间实现通信的标准化方法, 从而就使得

理解WebService SOAP WSDL

WebServices简介 先给出一个概念 SOA ,即Service Oriented Architecture ,中文一般理解为面向服务的架构, 既然说是一种架构的话,所以一般认为 SOA 是包含了运行环境,编程模型, 架构风格和相关方法论等在内的一整套新的分布式软件系统构造方法和环境, 涵盖服务的整个生命周期.而在 SOA 的架构风格中,服务是最核心的抽象手段. SOA 中的服务是构建在一些列基于开放标准的基础之上的, Web 服务定义了如何在异构系统之间实现通信的标准化方法, 从而就使得

cxf WebService设置wsdl中soapAction的值

用cxf开发一个WebService很简单,只需要下面几步: 1.定义接口 public interface HelloService { String hello(); } 2.实现 public class HelloServiceImpl implements HelloService { @Override public String hello() { return "hi,my name is gyoung "; } } 3.用ServerFactoryBean生成服务 p

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

开发环境:jdk1.6 + Tomcat7 + MyEclipse10 源码下载地址张贴在文章最后面:首先是使用WSDL协议实现:这里使用XFire XFire一个免费.开源的SOAP框架,它构建了POJO和SOA之间的桥梁,主要特性就是支持将POJO通过非常简单的方式发布成Web服务,其原理是以接口反射机制自动取得远程方法的 WSDL是一个用来描述Web服务和说明如何与Web服务通信的XML语言 准备:开发之前请先下载xfire-distribution-1.2.6.zip并解压缩 (1).新