使用MEL调用java有效负载的方法

时间:2013-10-31 20:24:36

标签: java mule mule-studio

我正在尝试使用MEL在java有效负载上调用方法(getSubject())。但是我得到异常 无法解析方法:java.lang.String.getSubject()[arglength = 0]] 。显然它假设有效负载是String类型,因为它是NotifyVO类型,如下面的日志语句所示。

INFO 2013-10-31 15:15:11,382 [[test] .sendEmail.stage1.02] org.mule.api.processor.LoggerMessageProcessor: payload:class com.test.NotifyVO

流程是 -

    <flow name="sendEmail" doc:name="sendEmail">
    <vm:inbound-endpoint exchange-pattern="one-way"
        path="send-email-vm" doc:name="VM" />
    <logger level="INFO" doc:name="Logger" message="payload : #[payload.getClass()]"/>
    <smtp:outbound-endpoint connector-ref="smtpGmailConnector"
        host="${email.host}" port="${email.port}" user="${email.user}"
        subject="#[payload.getSubject()]" password="${email.password}"
        doc:name="SMTP" />
</flow>

例外是 -

Root Exception stack trace:
[Error: unable to resolve method: java.lang.String.getSubject() [arglength=0]]
[Near : {... payload.getSubject() ....}]
         ^

1 个答案:

答案 0 :(得分:1)

SMTP传输正在将您的有效负载转换为字符串,以使其成为电子邮件的正文。

解决方法是将主题存储在SMTP出站端点之前的变量中并使用该变量:

    <logger level="INFO" doc:name="Logger" message="payload : #[payload.getClass()]"/>
    <set-variable variableName="subject" value="#[payload.getSubject()]" />
    <smtp:outbound-endpoint connector-ref="smtpGmailConnector"
        host="${email.host}" port="${email.port}" user="${email.user}"
        subject="#[flowVars['subject']]" password="${email.password}"
        doc:name="SMTP" />