如何将Mule表达式传递给spring属性

时间:2013-02-06 19:28:52

标签: spring mule

我正在寻找一种在运行时在mule flow中为spring属性分配异常消息的方法(Mule 3.3.0)

这就是我的代码片段的样子:

       <catch-exception-strategy>
            <logger message="----->Exception is #[exception.causeException]"
                level="INFO" />
            <custom-transformer
                class="com.company.transformer.VelocityMessageTransformer">
                <spring:property name="velocityEngine" ref="velocityEngine" />
                <spring:property name="templateName" value="soap11Fault.vm" />
                <spring:property name="beanClass">
                    <spring:bean parent="abstractSoap11ClientFault">
                        <spring:property name="faultString" value="Invalid Request" />
                        <spring:property name="detail" value="${exception.causeException}" />
                    </spring:bean>
                </spring:property>
            </custom-transformer>
        </catch-exception-strategy>

我想在此处将异常原因分配给detail属性:

<spring:property name="detail" value="${exception.causeException}" />

但是Spring正在寻找属性文件中的这个属性。我也尝试过这样做

 <spring:property name="detail" value="${#[exception.causeException]}" /> but doesn't work.

有没有办法在运行时将Mule表达式传递给Spring属性?

1 个答案:

答案 0 :(得分:2)

在应用程序初始化期间设置属性:在运行时评估要传递的值,因此无法工作。

您需要做的是com.company.transformer.VelocityMessageTransformer延长org.mule.transformer.AbstractMessageTransformer。然后,您必须覆盖transformMessage(MuleMessage message, String outputEncoding),这将使您可以访问当前消息及其关联的异常负载。异常有效负载是您使用#[exception]表达式获得的。