如何从Mule流中将参数传递给Java组件?

时间:2014-11-21 03:50:18

标签: java mule mule-el mule-component

我刚刚开始使用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

2 个答案:

答案 0 :(得分:3)

为您的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;
}
}

答案 1 :(得分:1)

您有多种选择:

  

@Mule Annotation

     

可以在组件条目上使用的参数注入注释   点和变换器方法,这个注释可以用来执行   消息有效负载上的Mule表达式,传递结果   进入方法。

另外:

  

@InboundHeaders Annotation

     

此注释控制当前邮件入站标头的方式   传递给一个方法。注释支持,Map,List,single   标题,通配符和可选条目。它可以用在组件上   入口点和@Transformer方法。

可能与:

一起使用
  

@Payload Annotation

     

可以在组件条目上使用的参数注入注释   使用@Transformer定义的点和变换器方法   注释,此注释控制当前消息有效负载的方式   通过执行自动转换传递给方法   消息有效负载以匹配带注释的参数类型。例如,如果   你期待一个XML文档,这可以注入到   组件入口点并自动转换为   org.wc3.dom.Document。

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