1

我正在尝试将变量传递给 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>

但是表达式永远不会解决?还有另一种方法可以做到这一点吗?

4

2 回答 2

4

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

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

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

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

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

希望这可以帮助。

于 2013-10-22T15:40:34.673 回答
1

当 Mule 服务器启动时,每个元素都被加载,并被component创建spring-object。我认为除了context-properties在服务器启动时发生的对象创建之外,您不能传递会话变量或任何变量。

于 2013-10-22T14:38:36.903 回答