如果Mule Expression组件中的条件检查没有存储会话变量?

时间:2015-08-06 02:05:44

标签: mule mule-studio mule-component mule-el

我试图在表达式组件中执行简单的if else条件。表达式组件后我有记录器。我的查询是,我无法看到test1,但能够在记录器组件中查看temp值。为什么呢?

同时,如果我在system.out.println中打印test1值。获得价值,但为什么不在记录器中?。

 <quartz:inbound-endpoint responseTimeout="10000" doc:name="Quartz" connector-ref="Quartz" jobName="Feedjob" repeatInterval="36000000" >
        <quartz:event-generator-job groupName="Feedjob" jobGroupName="Feedjob"/>
    </quartz:inbound-endpoint>     
  <s3:list-objects config-ref="Amazon_S3" doc:name="Amazon S3" bucketName="${amazon.BucketName}" prefix="master"/>
  <foreach doc:name="For Each">
    <set-variable variableName="TestValue" value="#[payload.getKey()]" doc:name="Variable"/>
       <expression-component doc:name="Expression"><![CDATA[
sessionVars.temp = message.outboundProperties['MULE_CORRELATION_SEQUENCE'] ;
if ( sessionVars.temp == "2"){
 sessionVars.test1 = sessionVars.temp ;
  System.out.println(sessionVars.test1);
return message.payload;
}
 else{
  System.out.println(" No test");
return message.payload;
 }
 ]]></expression-component>
 <logger message="Payload**********temp:#[sessionVars.temp] test1: #[sessionVars.test1]" level="INFO" doc:name="Logger"/>
  </foreach>

 <logger message="Outside For each logger**********temp:#[sessionVars.temp] test1: #[sessionVars.test1]" level="INFO" doc:name="Logger"/>

在设置了从表达式组件sessionVars.temp返回的有效负载之后似乎是一次,但是sessionVars.test1出现了。它很奇怪。我哪里错了?

2 个答案:

答案 0 :(得分:1)

解决此问题的两种方法:

  1. 访问会话变量时使用#[sessionVars['test1']]而不是#[sessionVars.test1]
  2. 在if块
  3. 之前声明会话变量sessionVars.test1="";

    问题似乎与使用.运算符访问变量的方式有关。只有在第一次没有创建这些变量的组件中声明变量时才会发生这种情况(在您的情况下,test1变量仅在第二次foreach迭代中创建,而不是在第一次创建时)。如果您的情况是if ( sessionVars.temp == "1"),则您不会遇到此问题。

    显然mule已经在最新版本中解决了这个问题,3.7似乎按预期工作。我在3.5中遇到了同样的问题。

答案 1 :(得分:0)

我尝试按以下方式重新创建您的场景: -

 <set-property propertyName="MULE_CORRELATION_SEQUENCE" value="2" doc:name="Property"/>
        <expression-component doc:name="Expression"><![CDATA[
sessionVars.temp = message.outboundProperties['MULE_CORRELATION_SEQUENCE'] ;
if ( sessionVars.temp == "2"){
 sessionVars.test1 = sessionVars.temp ;
  System.out.println(sessionVars.test1);
return message.payload;
}
 else{
  System.out.println(" No test");
return message.payload;
 }
 ]]></expression-component>

我可以在记录器中获取值: - INFO 2015-08-06 09:19:48,556 [[testcon].HTTP_Listener_Configuration1.worker.01] org.mule.api.processor.LoggerMessageProcessor: Payload**********temp:2 test1: 2
确保您的出境物业 MULE_CORRELATION_SEQUENCE 不为空或包含值