Mule ESB 学习笔记(11)Web Service Proxy(这里是一个可以正常运行的例子)
一、WebSevice Proxy?簡介
???? WebService Proxy?是ESB中最常見的使用場景之一,即通過?ESB?直接轉發?WebService Client?的?SOAP?請求,并將?WebServcie
Provider?的?SOAP?響應轉發給?WebService Client?,此時的ESB就是一個WebService Proxy。
?
二、WebSevice Proxy?在?Mule?中的產生背景
?????? Mule3.0?新增了一些比較有亮點的新特性?,其中包括“?pattern-based configuration?”這個概念。?pattern-based configuration
的主要目是將常用的功能模式化,達到簡化配置文件的目的,主要包括四種模式:?Simple Service?、?Web Service Proxy?、?Bridge?和
Validator。?Web Service Proxy Pattern?正是本文中提到的?WebService Proxy?,這里有關于它的更多介紹。
三、Web Service Proxy?的實現
1、WSProxy?的實現機制
WSProxy?實現機制的組件圖如下所示
在Mule中WSProxy?由?3?個組件組成:
(1) MessageSource
????它通過?MessageLister?接收或者產生?MuleMessage?,本實例中采用?DefaultInboundEndpoint?作為MessageSource?,并通過
socket?接收?SOAP消息。這里有關于?MessageSource?的介紹。
(2) AbstractProxyRequestProcessor
????負責處理MuleEvent,重寫WSDL地址。其實現類有兩個,分別是:?StaticWsdlProxyRequestProcessor?和
DynamicWsdlProxyRequestProcessor?,本實例中采用的是?DynamicWsdlProxyRequestProcessor?。
(3) OutboundEndpoint
????負責分發和接收SOAP消息。
2、WSProxy?運行期數據流圖
?????
運行期數據流圖如下所示
運行期數據流:
(1)在?DefaultInboundEndpoint?中,?HttpServerConnection?負責在?http://localhost:8080?上接收?SOAP?請求,
MessageProcessorChain?是一系列的?MessageProcessor?,對?MuleEvent?進行處理,主要包括:
ExceptionHandlingMessageProcessor?、?InboundEndpointMimeTypeCheckingMessageProcessor?、
InboundEndpointPropertyMessageProcessor?、?InboundLoggingMessageProcessor?等MessageProcessor?。
(2)在?MessageProcessorChain?中,通過?DynamicWsdlProxyRequestProcessor?重寫?WSDL?訪問地址,即將?proxy WSDL?地址重新為
remote WSDL?地址。
(3)在?DefaultOutboundEndpoint?中,主要通過?HttpClientMessageDispatcher?調用?HttpClient?發送和接收SOAP?消息。
Web Service Proxy
? ? Web Service Proxy用來將客戶端的WS請求直接轉發至相應的遠程WS服務端處理,并返回處理結果。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?>
??
- 說明
- 注意?outbound-endpoint?中?address?參數中的表達式。
- 測試方法
- 瀏覽器中通過“?http://localhost:65000/webservice/EchoService?wsdl?”(將內容復制,保存為?*.wsdl?),然后使用?SoapUI?測試。
- 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>
?
?
?
?
?
?
?
- 說明
?
Mule?為這種常見的場景提供了現成的模式,以簡化配置。
?
?
?
?
- 測試方法
?
通過“?http://localhost:65082/services/Echo2?wsdl?”獲取?wsdl?文件,然后使用?SoapUI?測試。2.3 配置方式3
?<ws:proxy name="mule-Ws-Proxy" inboundAddress="http://localhost:8080/services/WeatherWS"?
?????????????? outboundAddress="http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx"/>
?
?
?
?
?
?
?
說明
?
?
Mule?為這種常見的場景提供了現成的模式,以簡化配置。
?
?
?
?
- 測試方法
?
通過“?http://localhost:8080/services/WeatherWS?wsdl?”獲取?wsdl?文件,然后使用?SoapUI?測試。??完整的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>??
?測試:
Java代碼?
總結
以上是生活随笔為你收集整理的Mule ESB 学习笔记(11)Web Service Proxy(这里是一个可以正常运行的例子)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 通过wsdl2java工具生成客户端段代
- 下一篇: 开个公司要花多少钱 甚至不够买一条烟