如何在java组件中引用Mule主目录

时间:2015-01-23 07:11:35

标签: java mule

如何在Java组件中引用Mule的主目录,例如:

String directory = ${Mule_Home};

3 个答案:

答案 0 :(得分:4)

您可以这样做的一种方法是首先将#[mule.home]的值保存在变量中:

    <set-variable value="#[mule.home]" variableName="mule_home"
        doc:name="Variable" />

然后您可以按如下方式从组件中访问它:

    MuleMessage message = eventContext.getMessage();
    String mule_home = message.getProperty("mule_home", PropertyScope.INVOCATION);

实际上更好的另一种方法是实现MuleContextAware并评估组件中的mule表达式,如下所示:

public class MyComponent implements Callable, MuleContextAware {

MuleContext context;

@Override
public Object onCall(MuleEventContext eventContext) throws Exception {

    ExpressionLanguage el = context.getExpressionLanguage();
    String result = el.evaluate("mule.home");
    return result;
}

@Override
public void setMuleContext(MuleContext context) {
    this.context = context;
}
// include getters and setters for context

答案 1 :(得分:1)

这里的一种方法是通过名称“MULE_HOME”

设置环境变量

并使用以下命令在您的java组件中检索它: -

System.getenv("MULE_HOME");
希望它有所帮助! 祝你好运!

答案 2 :(得分:0)

只是为了补充Clare上面提到的内容,你可以简单地调用MuleContext上的方法,直接为你提供MULE_HOME目录的完整路径,作为使用ExpressionLanguage.evaluate()方法的替代方法。

public class MyComponent implements Callable, MuleContextAware {

MuleContext context;

@Override
public Object onCall(MuleEventContext eventContext) throws Exception {
    return context.getConfiguration().getMuleHomeDirectory();
}

@Override
public void setMuleContext(MuleContext context) {
    this.context = context;
}
// include getters and setters for context