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 简介


     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 实现

1WSProxy 的实现机制


WSProxy 
实现机制的组件图如下所示
MuleWSProxy  3 个组件组成:
(1) MessageSource
    
它通过 MessageLister 接收或者产生 MuleMessage ,本实例中采用 DefaultInboundEndpoint 作为MessageSource ,并通过

socket 接收 SOAP消息。这里有关于 MessageSource 的介绍。
(2) AbstractProxyRequestProcessor
    
负责处理MuleEvent,重写WSDL地址。其实现类有两个,分别是: StaticWsdlProxyRequestProcessor 

DynamicWsdlProxyRequestProcessor ,本实例中采用的是 DynamicWsdlProxyRequestProcessor 
(3) OutboundEndpoint
    
负责分发和接收SOAP消息。

2WSProxy 运行期数据流图

     
运行期数据流图如下所示

运行期数据流:
(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代码    收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <mule xmlns="http://www.mulesoft.org/schema/mule/core"  
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.        xmlns:spring="http://www.springframework.org/schema/beans"  
  5.        xmlns:stdio="http://www.mulesoft.org/schema/mule/stdio"  
  6.        xmlns:ws="http://www.mulesoft.org/schema/mule/ws"  
  7.        xmlns:http="http://www.mulesoft.org/schema/mule/http"  
  8.        xmlns:pattern="http://www.mulesoft.org/schema/mule/pattern"  
  9.     xsi:schemaLocation="  
  10.        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd  
  11.        http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd  
  12.        http://www.mulesoft.org/schema/mule/ws http://www.mulesoft.org/schema/mule/ws/current/mule-ws.xsd  
  13.        http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd  
  14.        http://www.mulesoft.org/schema/mule/pattern http://www.mulesoft.org/schema/mule/pattern/current/mule-pattern.xsd  
  15.        http://www.mulesoft.org/schema/mule/stdio http://www.mulesoft.org/schema/mule/stdio/current/mule-stdio.xsd">  
  16.   
  17.   
  18. <!-- 
  19. <flow name="local2remote-ws">  
  20.      <http:inbound-endpoint keep-alive="false" address="http://localhost:65000"  
  21.         encoding="UTF-8" disableTransportTransformer="false" exchange-pattern="request-response"/>  
  22.     <http:outbound-endpoint method="GET" keep-alive="false"  
  23.         address="http://webservice.webxml.com.cn#[header:INBOUND:http.request]" responseTimeout="10000" encoding="UTF-8"  
  24.         disableTransportTransformer="false" followRedirects="false" exchange-pattern="request-response" />  
  25. </flow>
  26. -->
  27. <flow name="local2remote-ws">
      <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>  
  28.   
  29.   
  30.  <pattern:web-service-proxy name="ws-proxy-pattern" inboundAddress="http://localhost:65081/services/getRegionDataset"  
  31.             outboundAddress="http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?op=getRegionDataset">  
  32.  </pattern:web-service-proxy>  
  33.   
  34.  <ws:proxy name="mule-Ws-Proxy" inboundAddress="http://localhost:8080/services/WeatherWS"   
  35.                outboundAddress="http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx"/>  
  36. </mule>  

 测试:

Java代码    收藏代码
  1. public class MuleProxyMain {  
  2.       
  3.     public static void main(String[] args)  {  
  4.         try {  
  5.             System.setProperty("java.endorsed.dirs","D:/android-workspace/MuleProxy/libs/endorsed");  
  6.             System.out.println(System.getProperty("java.endorsed.dirs"));  
  7.             String configFile = "mule-ws-conf-service.xml";  
  8.             String[] configFileArr = new String[] {configFile };  
  9.             MuleContextFactory muleContextFactory = new DefaultMuleContextFactory();  
  10.             MuleContext muleContext = muleContextFactory  
  11.                     .createMuleContext(new SpringXmlConfigurationBuilder(configFileArr));  
  12.             muleContext.start();  
  13.         } catch (Exception e) {  
  14.             e.printStackTrace();  
  15.         }  
  16.       
  17.     }  
  18.      
  19.   
  20. }  

 

目录
相关文章
|
5月前
【Azure 应用服务】Web App Service 中的 应用程序配置(Application Setting) 怎么获取key vault中的值
【Azure 应用服务】Web App Service 中的 应用程序配置(Application Setting) 怎么获取key vault中的值
|
3月前
|
计算机视觉 Python
Flask学习笔记(六):基于Flask的摄像头-web显示代码(可直接使用)
这篇文章是关于如何使用Flask框架结合OpenCV库,通过电脑摄像头实现视频流在网页上的实时显示,并提供了单摄像头和多摄像头的实现方法。
136 2
Flask学习笔记(六):基于Flask的摄像头-web显示代码(可直接使用)
|
2月前
【Azure App Service】PowerShell脚本批量添加IP地址到Web App允许访问IP列表中
Web App取消公网访问后,只允许特定IP能访问Web App。需要写一下段PowerShell脚本,批量添加IP到Web App的允许访问IP列表里!
|
3月前
|
文件存储 Python
Flask学习笔记(一):Flask Web框架
本文介绍了Flask Web框架的基本概念、安装方法、初始化参数、程序编写、静态文件显示和配置信息加载等基础知识。
38 0
|
5月前
|
关系型数据库 MySQL Linux
【Azure 应用服务】在创建Web App Service的时候,选Linux系统后无法使用Mysql in App
【Azure 应用服务】在创建Web App Service的时候,选Linux系统后无法使用Mysql in App
【Azure 应用服务】在创建Web App Service的时候,选Linux系统后无法使用Mysql in App
|
5月前
|
Shell PHP Windows
【Azure App Service】Web Job 报错 UNC paths are not supported. Defaulting to Windows directory.
【Azure App Service】Web Job 报错 UNC paths are not supported. Defaulting to Windows directory.
|
5月前
|
Linux 应用服务中间件 网络安全
【Azure 应用服务】查看App Service for Linux上部署PHP 7.4 和 8.0时,所使用的WEB服务器是什么?
【Azure 应用服务】查看App Service for Linux上部署PHP 7.4 和 8.0时,所使用的WEB服务器是什么?
|
5月前
【Azure 应用服务】通过 Web.config 开启 dotnet 应用的 stdoutLog 日志,查看App Service 产生500错误的原因
【Azure 应用服务】通过 Web.config 开启 dotnet 应用的 stdoutLog 日志,查看App Service 产生500错误的原因
|
3月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
184 3
|
1月前
|
前端开发 安全 JavaScript
2025年,Web3开发学习路线全指南
本文提供了一条针对Dapp应用开发的学习路线,涵盖了Web3领域的重要技术栈,如区块链基础、以太坊技术、Solidity编程、智能合约开发及安全、web3.js和ethers.js库的使用、Truffle框架等。文章首先分析了国内区块链企业的技术需求,随后详细介绍了每个技术点的学习资源和方法,旨在帮助初学者系统地掌握Dapp开发所需的知识和技能。
2025年,Web3开发学习路线全指南