【问题标题】:Accessing MuleMessage and a flow variable from Java component从 Java 组件访问 MuleMessage 和流变量
【发布时间】:2016-09-01 23:59:52
【问题描述】:

我有一个接收有效负载 (JsonData) 的 Java 组件,如下所示:

public String myMethod(JsonData payload) throws IOException {
  // do things with payload.
}

这工作正常,但我还需要访问方法中的流变量。我知道,为此,我需要运行 myMessage.getInvocationProperty("my-variable-name"); 但是,由于我只传递有效负载,因此我无权访问 MuleMessage。如何更改我的方法以便我可以访问我的消息/属性?

我试过了:

org.mule.RequestContext.getEvent().getMessage()

但它已被弃用。

此外,我已经阅读了有关此问题的各种答案,但从未找到完整的答案。

谢谢,

【问题讨论】:

    标签: java mule


    【解决方案1】:

    通过invoke 消息处理器将流变量作为第二个参数传递给myMethod

    所以,假设myMethod 的新签名是:

    public String myMethod(JsonData payload, String myVariable) throws IOException {
      // do things with payload.
    }
    

    你会这样做:

    <invoke object-ref="myComponent"
            method="myMethod"
            methodArguments="#[message.payload],#[flowVars['my-variable-name']]" />
    

    【讨论】:

    • 感谢您的指点,但这还不是一个完整的解决方案。我对 Java 或 Mule 的经验都很少,所以我仍然对你所说的“通过调用”消息处理器的意思有点困惑。具体会是什么样子?
    • 当然,我已经扩展了我的答案。
    • @DavidDossot 嗨,大卫。我在 Java 组件中需要的是整个 MuleMesage(想用 Java 丰富它)。我尝试通过#[message],但得到错误'找不到转换器来转换 \"SimpleDataType{type=org.mule.el.context.MessageContext, mimeType='/', encoding= 'null'}\" 到 \"SimpleDataType{type=org.mule.api.MuleMessage, mimeType='/', encoding='null'}\" 另外,带有注释 @Expr(expression ="#[message]"),似乎它正在尝试将结果转换为字符串,所以也不起作用。
    • 这里也一样。我正在尝试将 #[message] 作为方法参数传递。我得到了同样的例外
    • @DavidDossot 我已经使用新组件创建了一个 java 对象,我正在尝试将它传递给 java 函数。你能看看这个问题吗? *.com/questions/59558707/…感谢您的帮助。
    【解决方案2】:

    使用message.getInvocationProperty 方法。

    设置变量:

    <set-variable variableName="lastname" value="#[payload.lastname]" />
    

    从调用范围中检索变量:

    String lastname = message.getInvocationProperty("lastname");
    

    【讨论】: