Mule ESB 学习笔记(11)Web Service Proxy(这里是一个可以正常运行的例子)
一、WebSevice Proxy?簡(jiǎn)介
???? WebService Proxy?是ESB中最常見(jiàn)的使用場(chǎng)景之一,即通過(guò)?ESB?直接轉(zhuǎn)發(fā)?WebService Client?的?SOAP?請(qǐng)求,并將?WebServcie
Provider?的?SOAP?響應(yīng)轉(zhuǎn)發(fā)給?WebService Client?,此時(shí)的ESB就是一個(gè)WebService Proxy。
?
二、WebSevice Proxy?在?Mule?中的產(chǎn)生背景
?????? Mule3.0?新增了一些比較有亮點(diǎn)的新特性?,其中包括“?pattern-based configuration?”這個(gè)概念。?pattern-based configuration
的主要目是將常用的功能模式化,達(dá)到簡(jiǎn)化配置文件的目的,主要包括四種模式:?Simple Service?、?Web Service Proxy?、?Bridge?和
Validator。?Web Service Proxy Pattern?正是本文中提到的?WebService Proxy?,這里有關(guān)于它的更多介紹。
三、Web Service Proxy?的實(shí)現(xiàn)
1、WSProxy?的實(shí)現(xiàn)機(jī)制
WSProxy?實(shí)現(xiàn)機(jī)制的組件圖如下所示
在Mule中WSProxy?由?3?個(gè)組件組成:
(1) MessageSource
????它通過(guò)?MessageLister?接收或者產(chǎn)生?MuleMessage?,本實(shí)例中采用?DefaultInboundEndpoint?作為MessageSource?,并通過(guò)
socket?接收?SOAP消息。這里有關(guān)于?MessageSource?的介紹。
(2) AbstractProxyRequestProcessor
????負(fù)責(zé)處理MuleEvent,重寫WSDL地址。其實(shí)現(xiàn)類有兩個(gè),分別是:?StaticWsdlProxyRequestProcessor?和
DynamicWsdlProxyRequestProcessor?,本實(shí)例中采用的是?DynamicWsdlProxyRequestProcessor?。
(3) OutboundEndpoint
????負(fù)責(zé)分發(fā)和接收SOAP消息。
2、WSProxy?運(yùn)行期數(shù)據(jù)流圖
?????
運(yùn)行期數(shù)據(jù)流圖如下所示
運(yùn)行期數(shù)據(jù)流:
(1)在?DefaultInboundEndpoint?中,?HttpServerConnection?負(fù)責(zé)在?http://localhost:8080?上接收?SOAP?請(qǐng)求,
MessageProcessorChain?是一系列的?MessageProcessor?,對(duì)?MuleEvent?進(jìn)行處理,主要包括:
ExceptionHandlingMessageProcessor?、?InboundEndpointMimeTypeCheckingMessageProcessor?、
InboundEndpointPropertyMessageProcessor?、?InboundLoggingMessageProcessor?等MessageProcessor?。
(2)在?MessageProcessorChain?中,通過(guò)?DynamicWsdlProxyRequestProcessor?重寫?WSDL?訪問(wèn)地址,即將?proxy WSDL?地址重新為
remote WSDL?地址。
(3)在?DefaultOutboundEndpoint?中,主要通過(guò)?HttpClientMessageDispatcher?調(diào)用?HttpClient?發(fā)送和接收SOAP?消息。
Web Service Proxy
? ? Web Service Proxy用來(lái)將客戶端的WS請(qǐng)求直接轉(zhuǎn)發(fā)至相應(yīng)的遠(yuǎn)程WS服務(wù)端處理,并返回處理結(jié)果。Mule本身不做任何處理。
2.1 配置方式1
- 示例配置
<flow?name="local2remote-ws">
????<http:inbound-endpoint?keep-alive="false"?address="http://localhost:65000"
????????encoding="UTF-8"?disableTransportTransformer="false"?exchange-pattern="request-response"?doc:name="HTTP"
????????doc:description=""?/>
????<http:outbound-endpoint?method="GET"?keep-alive="false"
????????address="http://localhost:5050#[header:INBOUND:http.request]"?responseTimeout="10000"?encoding="UTF-8"
????????disableTransportTransformer="false"?followRedirects="false"?exchange-pattern="request-response"
????????doc:name="HTTP"?doc:description=""?/>
</?flow?>
??
- 說(shuō)明
- 注意?outbound-endpoint?中?address?參數(shù)中的表達(dá)式。
- 測(cè)試方法
- 瀏覽器中通過(guò)“?http://localhost:65000/webservice/EchoService?wsdl?”(將內(nèi)容復(fù)制,保存為?*.wsdl?),然后使用?SoapUI?測(cè)試。
- 2.2 配置方式2
- 示例配置
- <pattern:web-service-proxy?name="ws-proxy"?inboundAddress=http://localhost:65082/services/Echo2
- outboundAddress="http://localhost:65082/services/Echo1?method=echo">
</pattern:web-service-proxy>
?
?
?
?
?
?
?
- 說(shuō)明
?
Mule?為這種常見(jiàn)的場(chǎng)景提供了現(xiàn)成的模式,以簡(jiǎn)化配置。
?
?
?
?
- 測(cè)試方法
?
通過(guò)“?http://localhost:65082/services/Echo2?wsdl?”獲取?wsdl?文件,然后使用?SoapUI?測(cè)試。2.3 配置方式3
?<ws:proxy name="mule-Ws-Proxy" inboundAddress="http://localhost:8080/services/WeatherWS"?
?????????????? outboundAddress="http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx"/>
?
?
?
?
?
?
?
說(shuō)明
?
?
Mule?為這種常見(jiàn)的場(chǎng)景提供了現(xiàn)成的模式,以簡(jiǎn)化配置。
?
?
?
?
- 測(cè)試方法
?
通過(guò)“?http://localhost:8080/services/WeatherWS?wsdl?”獲取?wsdl?文件,然后使用?SoapUI?測(cè)試。??完整的mule配置文件:
?
Xml代碼??<http:inbound-endpoint keep-alive="false"
???address="http://localhost:8088/MSPGS/MPService" encoding="UTF-8"
???disableTransportTransformer="false" exchange-pattern="request-response" />
??<http:outbound-endpoint method="GET"
???keep-alive="false"
???address="http://10.10.31.25/MSPGWebPub/MSPGS/MPService.svc"
???responseTimeout="10000" encoding="UTF-8" disableTransportTransformer="false"
???followRedirects="false" exchange-pattern="request-response" />
?</flow>??
?測(cè)試:
Java代碼?
總結(jié)
以上是生活随笔為你收集整理的Mule ESB 学习笔记(11)Web Service Proxy(这里是一个可以正常运行的例子)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 通过wsdl2java工具生成客户端段代
- 下一篇: CXF客户端配置请求超时限制