wsdl文件详解,wsdl解析

http://www.itjxue.com  2023-01-21 12:44  来源:未知  点击次数: 

怎么解析WSDL文件中的ComplexType

客户端需要定义一个代理类PhotoItemProxy(名字随你取),这个类的数据成员和PhotoItem应该是一样的,

然后把这个xml读取到代理类PhotoItemProxy里,

客户端使用的时候,只使用代理类PhotoItemProxy,就如同使用PhotoItem类一样,

.net web server就是这么做的,

如何打开wsdl文件

有关更多信息,请参见

如何:在应用程序关系图中定义应用程序

用于定义应用程序的应用程序类型和原型。基于wsdl

文件创建

.net

web

服务提供方终结点。有关更多信息,请参见

如何:向应用程序添加终结点、

如何:向应用程序系统添加终结点和

如何:向应用程序系统的成员添加终结点。使现有的

web

服务终结点符合

wsdl

文件。有关更多信息,请参见

如何:使

web

服务终结点符合

wsdl

文件。为了生成对

asp.net

应用程序上所实现的

.net

web

服务提供方终结点的

web

引用,应指定一个不同的

wsdl

文件。可以使用

web

服务提供方终结点的“wsdl

位置”属性来指定此文件。说明:确保所指定的

wsdl

文件是对

web

服务的有效说明,并且它引用位于实际地址的

web

服务提供方终结点。如果

wsdl

文件为提供方终结点指定了一个不同的地址,将创建外部

web

服务,并且连接到该

web

服务提供方终结点的任何使用方终结点都将重新连接到该外部

web

服务。通过指定

wsdl

绑定位置来重写自动生成的

wsdl

文件中的默认

wsdl

绑定定义。有关更多信息,请参见

如何:重写

wsdl

文件中的

wsdl

绑定定义。更改要用于已实现的

asp.net

web

服务上的

web

服务提供方终结点的

wsdl

文件的位置。执行上述操作中的任何操作时,都将出现“添加

web

引用”对话框。说明:尽管在每一种情况下都会出现“添加

web

引用”对话框,但是只有在向解决方案资源管理器中的应用程序项目添加

web

引用时才会创建

web

引用。如果添加到项目中的

web

引用与解决方案中的现有

web

服务关联,则添加

web

引用的应用程序将连接到现有的

web

服务。否则,将创建新的外部

web

服务,并且该服务将连接到此应用程序。有关更多信息,请参见

“添加

web

引用”对话框

如何:添加和移除

web

引用。在其他所有情况下,都可以使用此对话框来指定

wsdl

文件的位置。说明:不支持包含多个

wsdl

绑定的

wsdl

文件或引用多个

web

服务的

disco

文件。不要直接基于解决方案中已存在的

web

服务创建外部

web

服务。在应用程序关系图上,只能引用

web

服务提供方终结点的位置一次。而应当为解决方案中不存在的

web

服务指定

wsdl

文件位置。为web

服务指定

wsdl

文件位置在“添加

web

引用”对话框中,输入

wsdl

文件或

web

服务定义的位置,然后单击“前行为表现”。提示:可以指定

wsdl

(.wsdl)

文件、web

上的位置或

web

服务的位置(如果

web

服务自动发布它的

wsdl

文件)。如果wsdl

文件存在,则“添加

web

引用”对话框将显示有关

web

服务和它所提供的操作的信息。单击“添加引用”。将出现处于选定状态的外部

web

服务、biztalk

web

服务或

.net

web

服务提供方终结点。请注意不同情况下的结果以及可能需要执行的操作,如下所述:如果添加外部或

biztalk

web

服务,则系统定义模型

(.sdm)

文件将立即出现在解决方案资源管理器的“解决方案项”文件夹中。有关更多信息,请参见

系统定义模型

(sdm)

概述。如果基于

wsdl

文件在

asp.net

应用程序上创建了

.net

web

服务提供方终结点,并且该应用程序已实现,则应用程序项目中将出现

.asmx

文件和

web

服务类文件。有关更多信息,请参见

应用程序关系图上的

asp.net

应用程序概述。如果为现有的

web

服务提供方终结点指定了一个不同的

wsdl

文件,则可能需要更新对该

web

服务的任何

web

引用。请参见任务

演练:在应用程序关系图上定义应用程序其他资源

在应用程序关系图中定义应用程序

在解析本地的wsdl文件时遇到如下问题,怎么解决

一、在VS提供的命令提示符中编译WSDL文件。

给个例子:

Wsdl /language:CS /n:mynamespace /out:myProxyClass.cs C:/myProject/wsdl/WEBservice.wsdl

最后一个参数是本地的绝对路径,是一个文件,也可以是一个网络路径。

二、在项目右键中添加WEB引用,输入本地的WSDL的绝对路径。

注意:用VS引用生成的代理类名称为Reference.cs,可以在项目目录下找到

eclipse解析wsdl文件 怎么获取wsdl信息

一个WSDL文档通常包含7个重要的元素,即types、import、message、portType、operation、binding、 service元素。

这些元素嵌套在definitions元素中,

(1) Definitions是WSDL文档的根元素。对应于这个类: org.eclipse.wst.wsdl.Definition 其他的对象都可以通过这个对象获得

(2) Types - 数据类型定义的容器,它使用某种类型系统(一般地使用XML Schema中的类型系统)。

(3) Message - 通信消息的数据结构的抽象类型化定义。使用Types所定义的类型来定义整个消息的数据结构。

(4) PortType - 对于某个访问入口点类型所支持的操作的抽象集合,这些操作可以由一个或多个服务访问点来支持。

(子节点) Operation - 对服务中所支持的操作的抽象描述,一般单个Operation描述了一个访问入口的请求/响应消息对。

(5) Binding - 特定端口类型的具体协议和数据格式规范的绑定。

(6) Service- 相关服务访问点的集合。

(子节点) Port - 定义为协议/数据格式绑定与具体Web访问地址组合的单个服务访问点。

下面是代码实例:

import java.io.File; import java.io.IOException; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import javax.wsdl.Message; import javax.wsdl.Part; import javax.wsdl.PortType; import javax.xml.namespace.QName; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; import org.eclipse.wst.wsdl.Definition; import org.eclipse.wst.wsdl.Types; import org.eclipse.wst.wsdl.internal.impl.PartImpl; import org.eclipse.wst.wsdl.internal.util.WSDLResourceFactoryImpl; import org.eclipse.wst.wsdl.util.WSDLResourceImpl; import org.eclipse.xsd.XSDElementDeclaration; import org.eclipse.xsd.XSDSchema; import org.eclipse.xsd.util.XSDResourceImpl; import org.junit.Test; import org.junit.Before; public class WSDLParserWithEclipse { Definition definition=null; String wsdlPathString="E:/HelloEclipse-EMF-WSDL-XSD/test.wsdl"; @Before public void setup(){ ResourceSet resourceSet = new ResourceSetImpl(); Resource.Factory.Registry registry = resourceSet.getResourceFactoryRegistry(); Map extensionToFactoryMap = registry.getExtensionToFactoryMap(); extensionToFactoryMap.put("wsdl", new WSDLResourceFactoryImpl()); File wsdlFile =new File(wsdlPathString); URI uri = URI.createFileURI(wsdlFile.getAbsolutePath()); // You can avoid this cast, but will have to cast anyway later to get the Definition out the resource contents WSDLResourceImpl wsdlResource = (WSDLResourceImpl) resourceSet.createResource(uri); try { wsdlResource.load(null); definition = wsdlResource.getDefinition(); }catch(Exception e){ e.printStackTrace(); } } @Test public void testTypes(){ Types types = definition.getETypes(); List schemas = types.getSchemas(""); XSDSchema schema = (XSDSchema) schemas.get(0); org.eclipse.xsd.util.XSDResourceImpl.serialize(System.out, schema.getElement()); } @Test public void testMessage(){ Map messages=definition.getMessages(); System.out.println("The message size is:"+messages.size()); Set setMessages=messages.keySet(); Iterator iteratorMessages=setMessages.iterator(); while(iteratorMessages.hasNext()){ QName key=(QName)iteratorMessages.next(); Message message=(Message)messages.get(key); //{}getKeysSoapIn //System.out.println("Message Name:"+message.getQName()); if(message.getQName().toString().indexOf("getKeysSoapIn")0){ System.out.println("Message Name:"+message.getQName()); Map partsMap=message.getParts(); //org.eclipse.xsd.impl.XSDElementDeclarationImpl System.out.println("Message Part size for getKeysSoapIn message is:"+partsMap.size()); PartImpl part= (PartImpl)partsMap.get("problem"); XSDElementDeclaration xsdElementDeclaration=part.getElementDeclaration(); XSDResourceImpl.serialize(System.out, xsdElementDeclaration.getElement()); } } } @Test public void testPortType(){ Map portTypes=definition.getPortTypes(); System.out.println("Port Type size:"+portTypes.size()); if(portTypes!=nullportTypes.size()0){ Set set=portTypes.keySet(); Iterator iterator=set.iterator(); while(iterator.hasNext()){ QName object=(QName)iterator.next(); PortType portType=(PortType)portTypes.get(object); System.out.println("Port Type name:"+portType.getQName()); org.eclipse.xsd.util.XSDResourceImpl.serialize(System.out, portType.getDocumentationElement()); } } } }

WSDL文件是什么?

Web service描述语言(WSDL)。

当程序员坐到电脑前,想要使用Web service的时候,其的工具(如Visual Studio)无法给其提供任何帮助,因为这些工具根本就不了解Web service。

解决方法是:

用机器能阅读的方式提供一个正式的描述文档.Web service描述语言(WSDL)

就是这样一个基于XML的语言,用于描述Web service及其函数、参数和返回值.因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的。

这将是一个很大的好处.一些最新的开发工具 既能根据你的Web service生成WSDL文档,又能导入WSDL文档,生成调用相应Web service的代码。

WSDL用来提供对服务的描述 ,它的主要构成要素有五个:

1)Types:定义WSDL定义中所用到的数据类型,即XML Schema Types。

2)Message :对一组消息的输入和输出参数的定义。

什么是wsdl

读懂WSDL

1. WSDL 是什么

WSDL 指网络服务描述语言 (Web Services Description Language)。 是一种使用 XML 编写的文档。这种文档可描述某个 Web service。它可规定服务的位置,以及此服务提供的操作(或方法)。

2. WSDL 文档结构

WSDL 文档是利用这些主要的元素来描述某个 web service 的:

元素

定义

portType

最重要的 WSDL 元素,它可描述一个 web service可被执行的操作以及相关的消息。

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

message

用于描述一个操作的数据元素。每个消息均由一个或多个部件组成。可以把这些部件比作传统编程语言中一个函数调用的参数。

types

web service 使用的数据类型定义。为了最大程度的平台中立性,WSDL 使用 XML Schema 语法来定义数据类型。

binding

web service 使用的通信协议元素。为每个端口定义消息格式和协议细节。

一个 WSDL 文档的主要结构

l 抽象定义

Types 独立与机器和语言的类型定义

Messages 包括函数参数(输入与输出分开)或文档描述

PortTypes 引用消息部分中消息定义来描述函数签名(操作名、输入参数、输出参数)

2 具体定义

Bindings PortTypes部分的每一操作在此绑定实现

Services 确定每一绑定的端口地址

文档形式为:

definitions

types

definition of types........

/types

message

definition of a message....

/message

portType

definition of a port.......

/portType

binding

definition of a binding....

/binding

/definitions

WSDL 文档可包含其它的元素,比如 extension 元素,以及一个 service 元素,此元素可把若干个 web services 的定义组合在一个单一的 WSDL 文档中。

2.1.WSDL文档实例

欢迎光临DIY部落,点击这里查看更多文章教程......

参考地址:

WSDL概述

WSDL就是描述XML Web服务的标准XML格式,WSDL由Ariba、Intel、IBM和微软等开发商提出。它用一种和具体语言无关的抽象方式定义了给定Web服务收发的有关操作和消息。就其定义来说,你还不能把WSDL当作一种对象接口定义语言,例如,CORBA或COM等应用程序体系结构就会用到对象接口定义语言。 WSDL保持协议中立,但它确实内建了绑定SOAP的支持,从而同SOAP建立了不可分割的联系。所以,当我在这篇文章中讨论WSDL的时候,我会假定你把SOAP作为了你的通讯协议。

————————————————————————————

WSDL协议已经被提交给了Internet标准组织W3C审批,目前还处于“确认提交”状态。W3C维持着正规的标准化系统同时提交提案必须经过确定的一套批准过程才能最终成为官方协议。在这种情况下,WSDL的地位,照外行看,至少标准组织在考虑让其成为将来可能标准中的一部分。如果你对这方面的情况感兴趣,或碰巧是一位特关心结果的“失眠症患者”,那么你不妨到W3C网站上去读读有关的建议标准。

用WSDL说明服务

作为一种基于XML的标准,如果你对XML具有一定的了解,那么WSDL的结构对你就不会陌生了。WSDL文档由服务用来描述数据类型的一组元素、服务可以收到的“消息”以及关联每条消息的SOAP绑定组成。

清单A就是一份简单的WSDL文档,该文档同W3C网站公布的WSDL示范文本是一样的,它说明了一种股票行情服务(这也是相当标准的一种Web服务)。

再仔细阅读清单A,你可以看到,文档首先以标准的XML头开头,其中包含了一个版本标识,而文档的根元素则被称为definitions。

Definitions元素可以采用若干种可选属性,这些属性说明文档同时定义文档其余部分使用的名称空间(namespace)。在这种情况下,定义被分配了一个名字(StockQuote),某些名称空间定义是根据以下常规前缀缩写制定的:

tns—“this namespace”的缩写,包含被定义服务的主名称空间

xsdl—XML Schema (XSD)名称空间,用于定义文档中的类型

soap—SOAP绑定采用的名称空间

接下来,为了定义服务的接口需要在type元素内定义所需要的任何复杂类型。这里你必须注意使用标准的XSD句法(属性),它是创造数据类型定义最为适合的方法。不过,如果你愿意,WSDL也能扩展使用不同的类型定义系统。

消息概述

按WSDL的用法,消息可以是传递给某一服务公布对象上的方法的任何参数或者方法被调用之后的任何返回结果。为了继续使用股票行情这个Web服务例子,单一定义方法多半如以下伪代码所示:

floatgetLastTradePrice(string tickerSymbol)

这样,就像你从清单A所看到的那样,文档中定义了两条消息,一条代表方法的输入参数tickerSymbol(GetLastTradePriceInput消息)另一条代表该方法的返回值(GetLastTradePriceResult消息)——最新的股票价格。

操作把消息组织到一起而且抽象地代表方法定义。在我们的例子中,这两条消息都在 GetLastTradePrice操作元素下的getLastTradePrice对象方法定义中组织起来。在一个 WSDL文件中的所有操作又都挨个在portType元素内分组。

WSDL文档的余下部分采用服务器上的侦听端点(binding 元素)绑定消息同时把端口定义同单一服务实体(service元素)组合起来。清单A的例子就定义了通过SOAP采用服务所需要的绑定。

WSDL工具

你可以手工创建WSDL文件,不过,你还可以采用相当多的工具通过WSDL来为你自动处理和定义Web服务。推荐工具软件如下:

Omniopera—一图形用户界面的WSDL、XML和XSD编辑器

Microsoft的SOAP Toolkit—一种工具包,其中包括根据WSDL定义创建COM接口的向导程序,还包括根据COM接口创建WSDL的向导程序

IBM的Web Services Toolkit—一种工具包,其中包括产生WSDL和SOAP部署说明的向导程序

参考网址:

(责任编辑:IT教学网)

更多

推荐其他营销文章