Mule ESB的filter

1. filter的作用

    filter指定了能够被service转发(routed)或是进一步被flow所处理的message所需要满足的条件。

2. filter分类

    Mule3的用户开发手册中,将filter分为三大类:Standard Filters、Transport and Module Filters、Custom Filters。

    2.1 Standard Filters

    结构:

    |-Payload Type Filter

    |-Expression Filter

       |-- XPath Expressions

       |-- JXPath Expressions

       |-- OGNL Expressions

    |-RegEx Filter

    |-Wildcard Filter

    |-Exception Type Filter

    |-Message Property Filter

    |-Logic Filters

       |-- And Filter

       |-- Or Filter

       |-- Not Filter

    2.1.1 Payload Type Filter

        检查payload对象的类型,如:

        <payload-type-filter expectedType="java.lang.String">

    2.1.2 Expression Filter

        使用evaluator属性指定expression evaluator——以下中的一个:header, payload-type, exception-type, wildcard, regex, ognl, xpath, jxpath, bean, groovy, custom。

        使用expression属性设置实际的表达式:

            如果evaluator是xpath, bean, ognl中的一个,expression是boolean类型的;

            如果evaluator是custom,需要使用customEvaluator指定一个已经被mule注册的自定义表达式。

        xpath: <expression-filter evaluator="xpath" expression="(msg/header/resultcode)='success'">

        jxpath: <expression-filter evaluator="jxpath" expression="(msg/header/resultcode)='success'">

        ongl: <expression-filter evaluator="ognl" expression="[MULE:0].equals(42)"/>  或  <ognl-filter expression="[MULE:0].equals(42)"/>

    2.1.3 RegEx Filter

        对message的payload使用正则表达式匹配,payload需要支持toString方法,因此可以使用AndFilter结合PayloadTypeFilter校验payload的类型。

        <regex-filter pattern="the quick brown (.*)"/>

    2.1.4 Wildcard Filter

        使用通配符对massage的payload进行匹配,payload需要支持toString方法,因此可以使用AndFilter结合PayloadTypeFilter校验payload的类型。

        <wildcard-filter pattern="the quick brown *"/>

    2.1.5 Exception Type Filter

        一个匹配异常类型的filter。

        <exception-type-filter expectedType="java.lang.RuntimeException"/>

    2.1.6 Message Property Filter

        该filter支持基于message property属性的业务逻辑过滤,这个过滤器非常强大,这时因为message的properties属性是对外公开的,用户可以自定义property的属性。

        属性匹配默认是大小写敏感的,可以通过caseSensitive进行修改,如:

        <message-property-filter pattern="Content-Type=text/xml" caseSensitive="false"/>

    2.1.7 Logic Filters

        Logic Filters包含三类:And, Or, and Not。由于它可以嵌套其他的filter,所以filter的逻辑可以进行组合。

        And Filter: 

        <and-filter>

        <payload-type-filter expectedType="java.lang.String"/>

        <regex-filter pattern="the quick brown (.*)"/>

        </and-filter>

        Or Filter:

        <or-filter>

        <payload-type-filter expectedType="java.lang.String"/>

        <payload-type-filter expectedType="java.lang.StringBuffer"/>

        </or-filter>

        Not Filter:

        <not-filter>

        <payload-type-filter expectedType="java.lang.String"/>

        </not-filter>

    2.2 Transport and Module Filters

        一些mule的transports和模块提供的自己的filter。这块的内容比较多,有时间单独介绍。

    2.3 Custom Filters

        当以上filter不能满足客户的需求时,你可以自定义filter。自定义filter需要实现Filter接口,该结构只包含一个方法:

        public boolean accept(MuleMessage message);

        当返回结果为true时,filter通过,否则没有通过。

<outbound>
<filtering-router>
<cxf:outbound-endpoint address="http://localhost:65071/services/EnterOrder?method=create"
synchronous="true"/>
<custom-filter class="org.mule.transport.http.filters.HttpRequestWildcardFilter">
<spring:property name="pattern" value="/services/EnterOrder?wsdl"/>
</custom-filter>
</filtering-router>
</outbound>
 

猜你喜欢

转载自winnie825.iteye.com/blog/1741081