SOAP 是基于 XML 的简易协议,可使应用程序在 HTTP 之上进行信息交换。
或者更简单地说:SOAP 是用于访问网络服务的协议。
您应当具备的基础知识
在继续学习之前,您需要对下面的知识有基本的了解:
-
XML
- XML 命名空间
什么是 SOAP?
- SOAP 指简易对象访问协议
- SOAP 是一种通信协议
- SOAP 用于应用程序之间的通信
- SOAP 是一种用于发送消息的格式
- SOAP 被设计用来通过因特网进行通信
- SOAP **于平台
- SOAP **于语言
- SOAP 基于 XML
- SOAP 很简单并可扩展
- SOAP 允许您绕过防火墙
- SOAP 将被作为 W3C 标准来发展
为什么使用 SOAP?
对于应用程序开发来说,使程序之间进行因特**信是很重要的。
目前的应用程序通过使用远程过程调用(RPC)在诸如 DCOM 与 CORBA 等对象之间进行通信,但是 HTTP 不是为此设计的。RPC 会产生兼容性以及安全问题;防火墙和代理服务器通常会阻止此类流量。
通过 HTTP 在应用程序间通信是更好的方法,因为 HTTP 得到了所有的因特网浏览器及服务器的支持。SOAP 就是被创造出来完成这个任务的。
SOAP 提供了一种标准的方法,使得运行在不同的操作系统并使用不同的技术和编程语言的应用程序可以互相进行通信。
Microsoft 和 SOAP
SOAP 是微软 .net 架构的关键元素,用于未来的因特网应用程序开发。
SOAP 1.1 被提交到 W3C
在 2000 年 5 月,UserLand、Ariba、Commerce One、Compaq、Developmentor、HP、IBM、IONA、Lotus、Microsoft 以及 SAP 向 W3C 提交了 SOAP 因特网协议,这些公司期望此协议能够通过使用因特网标准(HTTP 以及 XML)把图形用户界面桌面应用程序连接到强大的因特网服务器,以此来彻底变革应用程序的开发。
W3C 正在发展 SOAP 1.2
首个关于 SOAP 的公共工作草案由 W3C 在 2001 年 12 月发布。
@WebService(n**e = “fruit”)
@Controller
public class WsWebService extends SpringBeanAutowiringSupport{
@SuppressWarnings(“static-access”)
@WebMethod
public Object getListByType(@WebPar**(n**e = “userid”,@WebPar**(n**e = “type”) String type) String userid,
) throws Exception {
Map<String, Object> **pReturn = new HashMap<String, Object>();
**pReturn.put(“apple “, 108);
**pReturn.put(“pear “, 120);
**pReturn.put(“apricot “, 128);
**pReturn.put(“peach “, 130);
return XmlHelper.**p2Xmlstring(**pReturn);//返回xml格式数据
}
public static void **in(String[] args) {
try {
//请求webservice接口
URL url = new URL(”
http://127.0.0.1:8880/project/services/fruit?wsdl”); //webservice 接口地址
Service service = new Service();
Call call = (Call)service.createCall();
call.setTargetEndpointAddress(url);
call.setOperationN**e(“getListByType”); //方法名,和请求接口方法名称一致
call.setTimeout(100000);
//参数添加参数,参数顺序,类型,必须和调用接口的服务端同步。不然会报une**ected element (uri:””, local:”app**rk”). E**ected elements are <{}jsonStr>
call.addPar**eter(“userid”,XMLType.XSD_STRING, Par**eterMode.IN);
call.addPar**eter(“type”,XMLType.XSD_STRING, Par**eterMode.IN);
call.setReturnType(XMLType.XSD_STRING);
call.setUseSOAPAction(true);
//这是的顺序和参数名称一一对应。
Object obj [] =new Object[] {“userid”,”type”};//请求参数
String ret = null;
ret = (String) call.invoke(obj);
logger.info(“getApasInfoCount Count====”+ret);
} catch (Exception e) {
e.printStackTrace();
}
}
}
PS:
一、WebService到底是什么?
先来看下标准的定义:Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的**的通讯技术。是:通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。
其实,一言以蔽之:WebService是一种跨编程语言和跨操作系统平台的远程调用技术。
还可以从多个角度来理解WebService,从表面看,WebService就是一个应用程序向外界暴露出一个能通过Web进行调用的API,也就是说能用编程的方法通过Web来调用这个应用程序。我们把调用这个WebService的应用程序叫做客户端,而把提供这个WebService的应用程序叫做服务端。从深层次看,WebService是建立可互操作的分布式应用程序的新平台,是一个平台,是一套标准。它定义了应用程序如何在Web上实现互操作性,你可以用任何你喜欢的语言,在任何你喜欢的平台上写Web service ,只要我们可以通过Web service标准对这些服务进行查询和访问。
二、WebService平台技术
SOAP、WSDL、UDDI(
UniversalDescriptionDiscovery andIntegration)三者构成了WebService的三要素。下面,详细阐述这三大技术:
- SOAP
- WebService通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议。SOAP提供了标准的RPC方法来调用Web Service。
- SOAP协议组成:
- SOAP协议 = HTTP协议 + XML数据格式
- SOAP协议定义了SOAP消息的格式,SOAP协议是基于HTTP协议的,SOAP也是基于XML和XSD的,XML是SOAP的数据编码方式。打个比喻:HTTP就是普通公路,XML就是中间的绿色隔离带和两边的防护栏,SOAP就是普通公路经过加隔离带和防护栏改造过的高速公路。
- WSDL
- 好比我们去商店买东西,首先要知道商店里有什么东西可买,然后再来购买,商家的做法就是张贴**海报。 WebService也一样,WebService客户端要调用一个WebService服务,首先要有知道这个服务的地址在哪,以及这个服务里有什么方法可以调用,所以,WebService务器端首先要通过一个WSDL文件来说明自己家里有啥服务可以对外调用,服务是什么(服务中有哪些方法,方法接受的参数是什么,返回值是什么),服务的网络地址用哪个url地址表示,服务通过什么方式来调用。
- WSDL(Web Services Description Language)就是这样一个基于XML的语言,用于描述Web Service及其函数、参数和返回值。它是WebService客户端和服务器端都能理解的标准格式。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。一些最新的开发工具既能根据你的Web service生成WSDL文档,又能导入WSDL文档,生成调用相应WebService的代理类代码。
- UDDI
- UDDI (Universal Description, Discovery, and Integration) 是一个主要针对Web服务供应商和使用者的新项目。在用户能够调用Web服务之前,必须确定这个服务内包含哪些商务方法,找到被调用的接口定义,还要在服务端来编制软件,UDDI是一种根据描述文档来引导系统查找相应服务的机制。UDDI利用SOAP消息机制(标准的XML/HTTP)来发布,编辑,浏览以及查找注册信息。它采用XML格式来封装各种不同类型的数据,并且发送到注册中心或者由注册中心来返回需要的数据。
请先
!