webservice入门课程03
来源:互联网 发布:武汉网络与新媒体本科 编辑:程序博客网 时间:2024/06/01 08:09
本节主要内容:SOAP协议、WSDL
SOAP:simple object access protocol 简单对象访问协议
一条 SOAP 消息就是一个普通的 XML 文档,包含下列元素:
- 必需的 Envelope 元素,可把此 XML 文档标识为一条 SOAP 消息(Envelope:[ˈenvələup]n.信封,封皮)
- 可选的 Header 元素,包含头部信息
- 必需的 Body 元素,包含所有的调用和响应信息
- 可选的 Fault 元素,提供有关在处理此消息所发生错误的信息
语法规则
这里是一些重要的语法规则:
- SOAP 消息必须用 XML 来编码
- SOAP 消息必须使用 SOAP Envelope 命名空间
- SOAP 消息必须使用 SOAP Encoding 命名空间
- SOAP 消息不能包含 DTD 引用
- SOAP 消息不能包含 XML 处理指令
消息基本结构
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?
xml
version
=
"1.0"
?>
<
soap:Envelope
xmlns:soap
=
"http://www.w3. org/2001/12/soap-envelope"
soap:encodingStyle
=
"http://www.w3. org/2001/12/soap-encoding"
>
<
soap:Header
>
<!--百度百科示例-->
</
soap:Header
>
<
soap:Body
>
<!--百度百科示例-->
<
soap:Fault
>
<!--百度百科示例-->
</
soap:Fault
>
</
soap:Body
>
</
soap:Envelope
>
SOAP 把 XML 的使用代码化为请求和响应参数编码模式, 并用HTTP 作传输。具体地讲, 一个SOAP 方法可以简单地看作遵循SOAP编码规则的HTTP请求和响应,
个人理解:SOAP协议就是特定格式的http参数形式,也是说soap用来传递信息的一种格式或者约定的协议,基于此协议,应用服务器或者web服务器可以知道
要调用哪个方法,传递什么数据,并且以soap形式返回,浏览器也能够解析出期望的结果出来,总之,就是一种协议规范罢了
给参数设置名称@WebServicepublic interface IMyService {@WebResult(name="addResult")public int add(@WebParam(name="a")int a,@WebParam(name="b")int b);@WebResult(name="minusResult")public int minus(@WebParam(name="a")int a,@WebParam(name="b")int b);}调用public class TestCilent2 {public static void main(String[] args) throws MalformedURLException {URL url = new URL("http://localhost:777/ns?wsdl");QName sname = new QName("http://my.test/","MyServiceImplService");//直接通过生成的MyServiceImplService代替原来的service,获取接口,达到了简化MyServiceImplService msis = new MyServiceImplService(url,sname);IMyService ms = msis.getMyServiceImplPort();System.out.println(ms.add(12,33));}}
WSDL (Web Services Description Language):
http://localhost:7777/ns?xsd=1内容<xs:schema version="1.0" targetNamespace="http://my.test/"> <xs:element name="add" type="tns:add"/> <xs:element name="addResponse" type="tns:addResponse"/> <xs:element name="minus" type="tns:minus"/> <xs:element name="minusResponse" type="tns:minusResponse"/><xs:complexType name="add"> <xs:sequence> <xs:element name="a" type="xs:int"/> <xs:element name="b" type="xs:int"/> </xs:sequence></xs:complexType><xs:complexType name="addResponse"> <xs:sequence> <xs:element name="addResult" type="xs:int"/> </xs:sequence></xs:complexType><xs:complexType name="minus"> <xs:sequence> <xs:element name="a" type="xs:int"/> <xs:element name="b" type="xs:int"/> </xs:sequence></xs:complexType> <xs:complexType name="minusResponse"> <xs:sequence> <xs:element name="minusResult" type="xs:int"/> </xs:sequence> </xs:complexType></xs:schema>http://localhost:7777/ns?wsdl内容<definitions targetNamespace="http://my.test/" name="MyServiceImplService"> types:用来定义访问的元素和返回的元素<types> <xsd:schema><xsd:import namespace="http://my.test/" schemaLocation="http://localhost:7777/ns?xsd=1"/> </xsd:schema></types>message:用来传递soap消息<message name="add"> <part name="parameters" element="tns:add"/></message><message name="addResponse"> <part name="parameters" element="tns:addResponse"/></message><message name="minus"> <part name="parameters" element="tns:minus"/></message> <message name="minusResponse"> <part name="parameters" element="tns:minusResponse"/></message>portType:指明接口的名称和有哪些方法和消息<portType name="IMyService"><operation name="add"><input message="tns:add"/> <output message="tns:addResponse"/></operation><operation name="minus"> <input message="tns:minus"/><output message="tns:minusResponse"/></operation></portType>bingin:指定消息传递的格式<binding name="MyServiceImplPortBinding" type="tns:IMyService"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/> <operation name="add"><soap:operation soapAction=""/><input><soap:body use="literal"/></input><output><soap:body use="literal"/></output> </operation><operation name="minus"><soap:operation soapAction=""/> <input><soap:body use="literal"/></input> <output><soap:body use="literal"/></output> </operation></binding>service:指定服务的名称<service name="MyServiceImplService"><port name="MyServiceImplPort" binding="tns:MyServiceImplPortBinding"><soap:address location="http://localhost:7777/ns"/></port></service></definitions>
0 0
- webservice入门课程03
- WebService入门课程(01)
- webservice入门课程02
- Google API入门课程03
- 【WebService】WebService入门1
- WebService入门
- webservice入门
- WebService入门
- webservice 入门
- WebService入门
- WebService入门
- webService入门
- Webservice 入门
- WebService入门
- WebService入门
- WebService 入门
- WebService入门
- webService 入门
- libusb1.0
- Camera.parames.setDisplayOrientation问题解决
- c++的名字空间
- sqk语句2
- Citrix 许可证管理控制台装好后不能登陆解决方法(License Administration Console can’t login)
- webservice入门课程03
- Exception in thread "main" oracle.sysman.emcp.exception.DatabaseUnavailableException: 数据库实例不可用。
- 网络宣传推广的10种好方法
- IOS学习网址
- sql语句3
- 学习编写Metasploit的exploit模块
- GridView的使用(一):与ArrayAdapter搭配使用
- oracle dataguard 传输方式(基本原理)
- 类和对象