什么是wsdl?Java调用wsdl,怎么实现
本文目录
什么是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部落,点击这里查看更多文章教程......参考地址:推荐工具软件如下: Omniopera—一图形用户界面的WSDL、XML和XSD器 Microsoft的SOAP Toolkit—一种工具包,其中包括根据WSDL定义创建COM接口的向导程序,还包括根据COM接口创建WSDL的向导程序 IBM的Web Services Toolkit—一种工具包,其中包括产生WSDL和SOAP部署说明的向导程序参考网址:http://iask.sina.com.cn/b/11632650.html
Java调用wsdl,怎么实现
java调用wsdl的步骤如下,主要是使用第三方框架:
步骤如下:
1.下载AXIS2类库,AXIS2是目前java调用webservice的一个主要方法(由于更新较频繁,请自行google该类库的网址)
2.由于是第三方webservice,直接引入AXIS2的包就可以用了,代码如下:
import java.rmi.RemoteException;import javax.xml.rpc.ParameterMode;import javax.xml.rpc.ServiceException;import org.apache.axis.client.Call;import org.apache.axis.client.Service;import org.apache.axis.encoding.XMLType; public class webServiceTest { public String invokeRemoteFuc() { String endpoint = "迟点上个源码共大家参考!
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("http://www.xxxxx.com/problem"); 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); //{http://www.xxxxx.com/problem}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!=null&&portTypes.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()); } } } }
更多文章:
华硕bios更新成功开机黑屏(华硕笔记本电脑开机黑屏怎么解决)
2024年5月11日 19:13
特朗普称美将释放更多频谱以取得5G领域领导地位,为什么释放频谱就能取领导低位?特朗普“退休”之后的生活是怎样的
2022年12月16日 06:15
iphone3gs中国(从美国带回的iphone 3GS能在中国用吗还是需要什么程序才能用)
2023年9月4日 09:00
2012年的索尼笔记本值多少钱(13年索尼SVE1511SBC笔记本二手的现在值多点钱)
2024年1月3日 00:35
5dsr 5ds(佳能5Ds和佳能5DsR区别是什么佳能5Ds和5DsR哪个好)
2023年2月3日 00:15
impacted(impact是什么意思 impact怎么翻译)
2023年1月21日 17:00
三角牌电压力锅质量怎么样(我买的九阳压力锅用的不到二年,坏了四次,怎么解释)
2024年5月17日 05:44