SOAP服务器如何确定应该执行哪个操作?
问题描述:
我想问一下SOAP请求的Body元素究竟应该是什么。我假设它应该是一个定义我想要调用的操作名称的元素。我也会假设在这个元素内部应该有一个对应于这个操作的输入参数的结构。SOAP服务器如何确定应该执行哪个操作?
但是,如果我采取以下WSDL:http://adisrws.mfcr.cz/adistc/axis2/services/rozhraniCRPDPH.rozhraniCRPDPHSOAP,并让了SoapUI产生的getStatusNespolehlivyPlatce操作的请求,该请求的内容将是:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:roz="http://adis.mfcr.cz/rozhraniCRPDPH/">
<soapenv:Header/>
<soapenv:Body>
<roz:StatusNespolehlivyPlatceRequest>
<roz:dic>00247618</roz:dic>
</roz:StatusNespolehlivyPlatceRequest>
</soapenv:Body>
</soapenv:Envelope>
在<soapenv:Body>
没有的名字操作(getStatusNespolehlivyPlatce),但getStatusNespolehlivyPlatce操作的相应输入参数的名称。 SOAP服务器如何发现我正在调用getStatusNespolehlivyPlatce操作?
服务器是否使用HTTP
SOAPAction
标题来确定此? (在这种情况下,它是:SOAPAction:“http://adis.mfcr.cz/rozhraniCRPDPH/getStatusNespolehlivyPlatce”)服务器是否仅从底层WSDL和SOAP请求(即不查看HTTP标头)推断操作?
如果我(从服务器提供商的角度来看)决定不使用
SOAPAction
HTTP标头,那么根据W3C标准,SOAP请求应该如何显示?确实使用
SOAPAction
标头不是强制性的,它只是一种简化防火墙工作的信息,因此它们不必解析有关从XML请求中请求的操作的信息?
谢谢你的时间。
答
如果我给你一个Axis2框架的例子,它使用以下步骤来确定服务操作。详情如下网址提到的
- HTTP请求的URI
- 的SOAPAction
- SOAP Body元素的第一个孩子的QName
- 如果WS-Addressing的启用地址到EPR (端点参考)和动作元素