Java 为什么Mule ArrayList.contains()为空/空字符串提供了不正确的值
在我的Java 为什么Mule ArrayList.contains()为空/空字符串提供了不正确的值,java,arraylist,mule,Java,Arraylist,Mule,在我的Mule 3.3.0配置中有一个条件表达式,如下所示: <when expression="#[places.contains(message.payload)]"> 在执行上述条件表达式之前,有一个设置有效负载的XSL转换器。如果负载为非空,条件表达式可以正常工作,但在xsl transformer不返回结果且#[payload]为空的情况下,仍然在条件语句上方返回true 我怎样才能纠正这个问题 编辑 XSL转换器声明为: <xm:xslt-transformer
Mule 3.3.0
配置中有一个条件表达式,如下所示:
<when expression="#[places.contains(message.payload)]">
在执行上述条件表达式之前,有一个设置有效负载的XSL
转换器。如果负载为非空,条件表达式可以正常工作,但在xsl transformer不返回结果且#[payload]
为空的情况下,仍然在条件语句上方返回true
我怎样才能纠正这个问题
编辑
XSL
转换器声明为:
<xm:xslt-transformer xsl-file="xsl/getPlaces.xslt" returnClass="java.lang.String"/>
应通过以下方式访问places变量:
#[flowVars['places'].contains(message.payload)]
您的配置有两个问题:
- 用于创建列表的表达式不正确:它实际上只是创建了一个
字符串。改用MEL表达式:
<set-variable variableName="places"
value="#[{'Buenos Aires', 'Córdoba', 'La Plata'}]"/>
我编辑了这个问题,以表明xsl transformer已经用returnClass声明为java.lang.String
。我试过你的零钱,但结果还是一样#[places.contains(message.payload)]
或#[places.contains(message.payloadAs(java.lang.String))]
返回true
当xslt不返回任何结果元素时,我想我发现了第二个问题:places
被定义为字符串
而不是字符串
的列表
,因为在设置变量
中没有使用表达式。将places更改为上述编辑中建议的位置会引发[错误:无法解析方法:[Ljava.lang.Object;.contains(java.lang.String)[arglength=1]][Near:{…未知..}]
异常。现在,places的类型是Object
而不是String
。当我首先编写它时,我想知道类似的事情,变量如何获得类型
。但是当它允许我使用List.contains()
时,我认为可能是它基于值的赋值类型。实际上[Ljava.lang.Object
告诉我们位置
是一个对象列表
。我不明白为什么.contains()
对它不起作用。让我们试试MEL包含
,即#[places contains message.payload]
。它的工作原理与字符串等于()
。虽然我不明白为什么Mule中的List.contains()
失败,但很高兴MEL contains
工作正常。感谢David对此进行研究,请将此添加到您的答案中,以便我可以接受。此更改的结果仍然相同
#[flowVars['places'].contains(message.payload)]
<set-variable variableName="places"
value="#[{'Buenos Aires', 'Córdoba', 'La Plata'}]"/>
#[places contains message.payload]