有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java MULE ESB:带有regex()函数的表达式过滤器

我有一些Json数据,比如:

{
    "name" : "Italy"
}

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

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

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

如果我将'(.*)'作为正则表达式模式,那么作为使用此正则表达式()函数的证明,它是有效的

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

文件是here

有人理解我的错误吗

[编辑]

马修的解决方案是这样的:

    <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

我还没能赶上这个超量

谢谢


共 (3) 个答案

  1. # 1 楼答案

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

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

    它会像你期望的那样工作:)

  2. # 2 楼答案

    如果匹配错误,则返回false:

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