【问题标题】:MULE ESB : Expression Filter with regex() functionMULE ESB:带有 regex() 函数的表达式过滤器
【发布时间】:2016-06-02 00:59:59
【问题描述】:

我有一些 Json 数据作为有效负载,例如:

{
    "name" : "Italy"
}

我想用正则表达式过滤我的字段“名称”的内容。

现在我使用了这个过滤器。没有真正的错误,但它不匹配。

<expression-filter expression="regex('^[a-zA-Z]{3,15}$' , 'json:name')" doc:name="Expression"/>

如果我将'(.*)' 作为正则表达式模式,作为使用此 regex() 函数的证明,它可以工作。

<expression-filter expression="regex('(.*)' , 'json:name')" doc:name="Expression"/>

文档是here

有人理解我的错误吗?

[编辑]

那么 Matthew 的解决方案就是这样工作的:

    <set-variable variableName="PayloadBackup" value="#[payload]" doc:name="Variable"/><json:json-to-object-transformer returnClass="java.util.Map" doc:name="JSON to Object"/>
    <expression-transformer expression="#[payload['name'].matches('^[a-zA-Z]{3,15}$')]" doc:name="Expression"/>
    <expression-filter expression="#[payload]" doc:name="Expression"/>
    <set-payload value="#[PayloadBackup]" doc:name="Set Payload"/>

虽然很丑。

如果字符串与正则表达式不匹配,引擎会回答:

null (java.lang.NullPointerException). Message payload is of type: Boolean

我还不能捕捉到这个异常。

谢谢

【问题讨论】:

  • 经过多次尝试,似乎不可能将 json 作为字符串反序列化为 java.lan.Object 或 java.util.List 或任何类型的集合。因此,在这种情况下反序列化 Json 时,不可能使用过滤器注入。如果有人有我感兴趣的想法!

标签: java regex json mule esb


【解决方案1】:

查看JSON processing 部分或查看this similar question

【讨论】:

    【解决方案2】:

    我不确定您的正则表达式是否正确,但如果正确,您可以随时使用以下代码:-

    <http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8081" doc:name="HTTP Listener Configuration"/>
    
     <flow name="teFlow">
            <http:listener config-ref="HTTP_Listener_Configuration" path="/test" doc:name="HTTP"/>
            <set-payload value="{&quot;name&quot; : &quot;Italy&quot;}" mimeType="application/json" doc:name="Set Payload"/>
             <json:json-to-object-transformer returnClass="java.lang.Object" doc:name="JSON to Object"/>
             <expression-filter expression="#[message.payload.name.matches('^[a-zA-Z]{3,15}$')]" doc:name="Expression"/>
             <logger level="INFO" message="message paased !!" doc:name="Logger"/>
            <json:object-to-json-transformer doc:name="Object to JSON"/>
        </flow>
    

    它将按您的预期工作:)

    【讨论】:

      【解决方案3】:

      如果匹配错误返回false:

      #[?payload['name'].matches('^[a-zA-Z]{3,15}$') or false]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-17
        • 2019-07-26
        • 2014-11-06
        相关资源
        最近更新 更多