Mule - 将流或会话变量注入Spring bean

时间:2013-10-22 10:41:43

标签: mule

我试图将变量传递给Spring bean,如下所示:

<component doc:name="Java">
            <no-arguments-entry-point-resolver />
            <prototype-object class="org.test.MyComponent">
                <property key="fileName" value="#[sessionVars.filename]" />
            </prototype-object>
        </component>

但表达从未解决过?还有另一种方法吗?

2 个答案:

答案 0 :(得分:4)

这与弹簧配置和Mule表达语言(MEL)混淆。

第1点: 即使组件是在Mule Config文件中定义的。元素(标签)<property/>来自Springs Bean模式定义。因此,MEL不解释keyvalue的属性值。

第2点:由于它是在加载(实例化)期间调用的setter注入提供的,因此会话变量(运行时间值)的值将不可用。

一种可能的解决方案是使组件实现Mule的Callable接口。这样您就可以访问包含会话变量的MuleMessage。

@Override
public Object onCall(MuleEventContext eventContext) throws Exception {          
    MuleMessage muleMessage = eventContext.getMessage();
    muleMessage.getProperty("propertyName", PropertyScope.SESSION);

希望这有帮助。

答案 1 :(得分:1)

当Mule服务器启动时,将加载每个元素,并创建componentspring-object。我不认为你可以将会话变量或者context-properties以外的任何变量传递给服务器启动时发生的对象创建。