`
de6566088
  • 浏览: 31640 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

WebService的WSDL编写

阅读更多

编写WebServiceWSDL文件,当然在编写前需要初略的了解一下XMLXML是可扩展标记语言,话说这个词我开始也不理解,后来渐渐的有了自己的概念,什么是可扩展呢?就是想怎么写就怎么写,想写什么就写什么,但是写完了怎么让别人懂呢?于是给我们写的东西贴上标记便成了XML的书写规范。

就拿最简单的举例子,我们是个学生学校要记录下每个人的信息,老师会给我们发个表格填写自己的信息,这个表格就相当于XML的标记,而可扩展就相当于在姓名栏里面,我是张三,你是李四一个标记下你可以随便写任何信息。于是这张表格在XML是这样展现的

<user>                             <user>

       <name>李雷</name>                 <name>韩梅梅</name>

       <sex></sex>                      <sex></sex>

<age>12</age>                      <age>12</age>

<email>lilei@msn</email>            <email>hmm@163</email>

</user>                            </user>

于是我们就知道了有一个叫李雷的人和一个叫韩梅梅的人,我们也就可以通过程序将这些信息解析出来。

       但是我们有一天发现一个人在年龄那栏写个“二十”<age>二十</age>,这个东西要传到程序中我们是没有办法解析的,于是就出现了2种对XML的内容做约束的规范(这个名词可能不太准确),一种就是DTD,一种是schema,当然现在DTD大部分被schema所替代

弄个DTD的简单例子,

 

<?xml version="1.0" encoding="UTF-8"?>
<!-- 定义一个班级,班级有班级名称,有年纪,有学生 -->
<!ELEMENT classroom (claName,grade,students)>
<!—将id定义为班级的一个属性(ID性质不能有同名的) -->
<!ATTLIST classroom id ID #REQUIRED>
<!-- 设置节点的类型“#PCDATA”,在DTD里面只有“#PCDATA”这一种类型限制(它的局限性) -->
<!ELEMENT claName (#PCDATA)>
<!ELEMENT grade (#PCDATA)>
<!--  一个班级内会有好多学生于是学生是个复数,然后再定义每个学生 -->
<!ELEMENT students (student+)><!—常用控制符?表示0或者1次,*代表0或者多次,+1
次以上包含1次,默认不写就表示1次(这些是正则规则) -->
<!-- 定义每个学生的信息 -->
<!ELEMENT student (id,stuName,age)>
<!ELEMENT id (#PCDATA)>
<!ELEMENT stuName (#PCDATA)>
<!ELEMENT age (#PCDATA)>

 

<!-- 写一个XML引用上面的DTD做限制,如果用编写工具,写错信息就将会有提示 -->

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE classroom SYSTEM "classroom.dtd">
<classroom id="c1">
	<claName>10计算机应用技术</claName>
	<grade>2010</grade>
	<students>
		<student>
			<id>1</id>
			<stuName>zhangsan</stuName>
			<age>12</age>
		</student>
		<student>
			<id>2</id>
			<stuName>lisi</stuName>
			<age>122</age>
		</student>
	</students>
</classroom>

 

<?xml version="1.0" encoding="UTF-8"?>
<!-- 首先,先看一下schema的几个属性,xmlns:xsd引用schema的文件固定写法,
当然后面的:xsd可以不写也可以换其他的,他表示要引用schema的信息需要在xsd:下引用,tagetNameSpace指定的本文件的命名空间,xmlns:tns与tagetNameSpace是一致的,
其后面的tns是指明要引用当前命名空间下的信息需要在前面加上tns前缀 -->
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
		targetNamespace="http://www.example.org/classroom" 
		xmlns:tns="http://www.example.org/classroom" 
		elementFormDefault="qualified">
	<!-- 定义一个节点学生,是学生类型 -->
	<xsd:element name="student" type="tns:studentType"/>
	<!-- 下面定义学生类型是什么样子的,complexType代表是复杂类型 -->
	<xsd:complexType name="studentType">
		<!-- 复杂类型一般都需要建立一个序列 -->
		<xsd:sequence>
			<!-- 设置属性及类型 -->
			<xsd:element name="name" type="xsd:string"/>
			<xsd:element name="sex" type="tns:sexType"/>
		</xsd:sequence>
	</xsd:complexType>
	<!-- 设置类型的限制条件 -->
	<xsd:simpleType name="sexType">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="男"/>
			<xsd:enumeration value="女"/>
		</xsd:restriction>
	</xsd:simpleType>
</xsd:schema>

 

以上方面注释的不是很好,因为接触不多对此表达不是很准确,如有意见欢迎批改。

当然以上仅为了解,其真实的写WSDL时我们并不做这样的限制;因为我们的bean是没有那么多限制存在的,我们只有数据类型限制,以下写个例子吧

Wsdl文件

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
	xmlns:tns="http://www.dhy.com/user/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
	xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="userService"
	targetNamespace="http://www.dhy.com/user/">
	<!-- 引入xsd文件 -->
	<wsdl:types>
		<xsd:schema targetNamespace="http://www.dhy.com/user/">
			<!-- <xsd:import namespace="http://www.dhy.com/user/" schemaLocation="user.xsd"/> -->
			<xsd:include schemaLocation="user.xsd"/>
		</xsd:schema>
	</wsdl:types>
	
	<!-- add的消息(相当于类有一个add方法) -->
	<wsdl:message name="add">
		<!-- 消息里面包含add对象(相当于类中要传入的值) -->
		<wsdl:part element="tns:add" name="parameters" />
	</wsdl:message>
	<!-- add的返回消息相当于return -->
	<wsdl:message name="addResponse">
		<wsdl:part element="tns:addResponse" name="parameters" />
	</wsdl:message>
	
	<wsdl:message name="delete">
		<wsdl:part element="tns:delete" name="parameters" />
	</wsdl:message>
	
	<wsdl:message name="deleteResponse">
		<wsdl:part element="tns:deleteResponse" name="parameters" />
	</wsdl:message>
	
	<!-- 接口方法 -->
	<wsdl:portType name="IUserService">
		<!-- 具有add方法 ,这里注意wsdl的add和tns的add不是一个意思-->
		<wsdl:operation name="add">
			<!-- 输入项 -->
			<wsdl:input message="tns:add" />
			<!-- 输出项 -->
			<wsdl:output message="tns:addResponse" />
		</wsdl:operation>
		<!-- 具有delete方法 -->
		<wsdl:operation name="delete">
			<wsdl:input message="tns:delete" />
			<wsdl:output message="tns:deleteResponse" />
		</wsdl:operation>
	</wsdl:portType>
	
	<wsdl:binding name="userServiceSOAP" type="tns:IUserService">
		<soap:binding style="document"
			transport="http://schemas.xmlsoap.org/soap/http" />

		<wsdl:operation name="add">
			<wsdl:input>
				<soap:body use="literal" />
			</wsdl:input>
			<wsdl:output>
				<soap:body use="literal" />
			</wsdl:output>
		</wsdl:operation>
		
		<wsdl:operation name="delete">
			<wsdl:input>
				<soap:body use="literal" />
			</wsdl:input>
			<wsdl:output>
				<soap:body use="literal" />
			</wsdl:output>
		</wsdl:operation>
	</wsdl:binding>
	<!-- 服务名称,总结起来就是IUserService为服务接口,
		userService为服务的名称,我们想调用服务提供add方法,
		我们传入add类型的信息(在user.xsd中定义)即User的信息,
		然后服务端给返回个addResponse(也在user.xsd中定义) -->
	<wsdl:service name="userService">
		<wsdl:port binding="tns:userSOAP" name="userSOAP">
			<soap:address location="http://localhost:8989/ms/" />
		</wsdl:port>
	</wsdl:service>
	
</wsdl:definitions>

 

6
2
分享到:
评论
6 楼 crazywen2011 2012-11-23  
5 楼 307622798 2012-11-23  
其实学一下也挺好的,总是用CXF去自动生成有时也麻烦,呵呵。
4 楼 de6566088 2012-11-23  
gao_xianglong 写道
介绍的详细的,但企业开发一般相对都会采用第三方生成wsdl文件及stub调用。

现在企业开发确实都是使用第三方框架来做,大体用的多数的是AXIS和CXF,他们也都提供的JAVA2WSDL的生成工具,但是有些生成的信息可能并不很符合开发者的预期,所以我个人认为有些关键点手写WSDL文件的能力还是有需要的(当然我算是初学者,很多东西接触的还不够多多谢指点),谢谢支持!
3 楼 de6566088 2012-11-23  
lang330965445 写道
支持下,心得体会很好

谢谢支持~~
2 楼 gao_xianglong 2012-11-22  
介绍的详细的,但企业开发一般相对都会采用第三方生成wsdl文件及stub调用。
1 楼 lang330965445 2012-11-22  
支持下,心得体会很好

相关推荐

    WSDl生成WebService接口及调用

    在本主题中,我们将深入探讨如何使用WSDL生成WebService接口以及编写Test调用方法进行测试。 1. WSDL基础 WSDL文件是一个XML文档,它描述了服务的位置(endpoint)、使用的消息格式(message)和服务提供的操作...

    WebService描述语言WSDL详解

    **WebService描述语言WSDL详解** Web服务描述语言(Web Service Description Language,简称WSDL)是一种XML格式,用于定义网络服务的接口。它是构建基于SOAP(Simple Object Access Protocol)的Web服务的核心工具...

    Webservice服务编写方法

    本文档旨在详细介绍如何编写Webservice服务,通过遵循本指南,用户能够了解整个开发流程,包括Wsdl的编写、反编译及服务实现等关键步骤。 #### 二、Wsdl的编写 ##### 1. Wsdl介绍 Wsdl(Web Services Description ...

    基于wsdl进行webservice接口开发打印helloworld.rar

    文件"001使用wsdl进行webservice接口开发打印helloworld.doc"很可能包含了详细的步骤指南,指导如何创建服务端的WSDL,如何编写服务代码,以及如何在客户端消费这个服务。文件可能涵盖了以下内容: 1. 创建WSDL文档...

    webservice的编写和调用

    WebService是一种用于在分布式环境中进行系统间通信的技术,它遵循一系列的标准(如SOAP、WSDL、UDDI等),允许不同语言编写的程序通过HTTP协议进行数据交换和功能调用。本文将深入探讨WebService的编写、发布及调用...

    官网下载的所有wsdl文件

    这样,开发者就可以在自己的应用程序中直接调用Web服务的函数,而无需手动编写复杂的网络通信逻辑。 总的来说,这个资源对于那些需要与特定Web服务交互,或者在离线环境中工作的开发者来说,是一个宝贵的工具。通过...

    WebService的编写和调用

    ### WebService的编写与调用详解 #### 一、WebService简介 WebService是一种支持通过网络进行交互的应用程序组件,它提供了一种标准化的方式来实现系统间的通信。WebService基于一系列开放标准(如XML、SOAP、WSDL...

    WebService 添加头部验证信息

    当我们谈论"WebService添加头部验证信息"时,通常是指在发送SOAP(Simple Object Access Protocol)消息时,通过添加特定的头部信息来增强安全性与认证机制。在这种情况下,标签“TokenSoapHeader”暗示我们可能在...

    myeclipse根据wsdl文件生成webservice服务端

    5. **测试服务**:部署完成后,可以使用MyEclipse内置的Web服务测试工具或通过编写客户端代码来验证服务是否正常工作。测试通常包括调用服务的各种操作,检查返回结果是否符合预期。 在标签中提到的“源码”,指的...

    06.WSDL深入详解和WebService调用过程的底层本质

    Web服务描述语言(WSDL,...开发者应熟练掌握WSDL的编写和解析,以及如何使用像CXF这样的工具来简化工作流程。同时,熟悉各种Web服务协议和标准,如SOAP、RESTful API和WS-*规范,能更好地应对复杂的分布式系统需求。

    解析及动态调用Webservice程序

    此外,工具还支持动态调用,这意味着开发者可以直接在工具内执行Web服务的操作,观察结果,而无需编写额外的代码。这对于快速原型设计、测试或演示Web服务功能具有很高的价值。 总的来说,WebService是实现跨平台、...

    Eclipse根据wsdl文件自动生成webservice client图解

    本文将详细讲解如何在Eclipse环境中,根据WSDL文件自动生成WebService客户端,并提供调用示例。 首先,我们需要理解WSDL文件的结构。WSDL文件包含了服务的端点(或地址)、操作(或服务方法)、输入和输出消息的...

    myeclipse制作webservice接口

    【标题】:myeclipse制作Web服务(WebService)接口 【描述】:在软件开发中,Web服务是一种基于网络的、平台无关的交互方式,它允许不同系统间的应用程序进行通信。myeclipse作为一款强大的Java集成开发环境,支持...

    js调用webservice客户端编写

    在你提供的文件中,“TripService.wsdl”就是一个WSDL文件,它描述了名为“TripService”的WebService的各种服务方法、输入输出参数以及服务地址等信息。 要使用JavaScript调用WebService,我们首先需要解析WSDL...

    wsdl.rar_WEBservice-Sqlserver_java webservice_webservice sgip_w

    【标签】"webservice-sqlserver java_webservice webservice__sgip wsdl_webservice_ wsdl.rar"进一步揭示了技术栈。"sqlserver"表明数据库管理是通过SQL Server完成的,这通常涉及到使用JDBC(Java Database ...

    Eclipse根据wsdl文件逆向生成webservice客户端项目源码

    Web服务的一个常见实现是基于SOAP(Simple Object Access Protocol)的WebService,它通过WSDL(Web Services Description Language)文件来定义服务接口。本文将详细介绍如何在Eclipse环境中,利用WSDL文件逆向生成...

    WebService编写、调用测试工具

    本教程将详细介绍如何编写、调用和测试WebService。 一、WebService的原理 1. WSDL(Web Services Description Language):定义了服务接口,描述了服务的位置以及如何调用这些服务。它是XML格式的文档,包含了...

    Webservice接口调试工具

    .NET Webservice Studio是一种以交互方式调用Web方法的工具。 用户可以提供WSDL端点。 单击按钮获取工具获取WSDL,从WSDL生成.NET代理并显示可用方法列表。 用户可以选择任何方法并提供所需的输入参数。 在单击...

    利用WebService编写的SendEMail程序

    在本示例中,“利用WebService编写的SendEMail程序”是利用了WebService技术来发送电子邮件。这个程序的核心在于,它创建了一个可以被远程调用的服务接口,用于处理邮件发送功能。 **WebService的工作原理** ...

    WebService描述语言WSDL详解【免费】

    WebService描述语言WSDL是Web Service的一种重要组件,它提供了一种基于XML的描述服务的接口和消息的方法。WSDL文档描述了一个Web Service的接口,它包括一系列的抽象定义和具体定义,抽象定义与具体实现分离,有助...

Global site tag (gtag.js) - Google Analytics