webservice入门课程03

本节主要内容: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形式返回,浏览器也能够解析出期望的结果出来,总之,就是一种协议规范罢了


给参数设置名称

@WebService
public 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>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值