3

我刚刚开始使用 mule,无法弄清楚如何将请求标头的一部分作为参数/参数传递给 Java 组件。

我的 Java 组件如下

public String processHeader(String in)
{
   //process header
   System.out.print(" Header" + in);
}

我已经能够processHeader从流程中以以下方式访问

            <component> 
              <method-entry-point-resolver> 
              <include-entry-point method="processHeader" /> 
              </method-entry-point-resolver> 
              <singleton-object class="my.test.mule.Processor" /> 
            </component> 

使用http://localhost:8080/test. 印刷Header test

我可以使用以下内容转储标题的内容

<logger level="INFO" doc:name="Logger" message="#[headers:INBOUND:*]"/>

但我似乎无法弄清楚如何将message作为参数传递给,processHeader也找不到任何相关的例子。任何帮助,将不胜感激。

顺便说一句,如果这很重要,我正在使用Mule 3.5

4

2 回答 2

4

为您的 java 组件实现 Callable 接口。当默认方法被覆盖时,您将获得 eventContext 作为参数,您可以在其中找到 mule 消息,这反过来又使您可以访问标头和有效负载。样品在这里:

import org.mule.api.MuleEventContext;
import org.mule.api.lifecycle.Callable;
import org.mule.api.transport.PropertyScope;
public class Test implements Callable {

@Override
public Object onCall(MuleEventContext eventContext) throws Exception {
    eventContext.getMessage().getProperty("header1", PropertyScope.INBOUND);
    return null;
}
}
于 2014-11-21T09:20:30.793 回答
1

您有多种选择:

@Mule 注释

可用于组件入口点和转换器方法的参数注入注解,此注解可用于在消息负载上执行 Mule 表达式,并将结果传递给方法。

还:

@InboundHeaders 注解

此注释控制当前消息入站标头如何传递到方法中。注释支持 Map、List、单个标题、通配符和可选条目。它可以用于组件入口点和@Transformer 方法。

可能结合使用:

@Payload 注解

一个参数注入注解,可用于使用@Transformer 注解定义的组件入口点和转换器方法,此注解通过执行消息负载的自动转换以匹配注解的参数类型来控制当前消息负载如何传递到方法中。例如,如果您期望 XML 文档,可以将其注入到组件入口点并自动转换为 org.wc3.dom.Document。

您还可以按照不同响应中的说明实现 Callable,但这比此解决方案的表现力要差得多。

于 2014-11-21T13:36:52.027 回答