2014-11-21 119 views
2

我刚刚开始使用mule,不知道如何将我的请求头的一部分作为参数/参数传递给Java组件。如何从Mule流中将参数传递给Java组件?

我的Java组件是如下

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

的Ive能够从流

  <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访问processHeader以下面的方式。打印Header test

我可以在使用转储头的内容如下

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

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

顺便说一句,我使用Mule 3.5如果这件事。

+0

您正在使用哪个版本的Mule? – 2014-11-21 04:51:35

回答

2

实现您的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; 
} 
} 
+0

看起来不错。但是,我将如何在流程中引用'onCall'? – userNotFound 2014-11-21 17:04:01

+0

这个onCall被自动调用。不需要显式调用。 – tortoise 2014-11-22 18:14:12

+0

http://stackoverflow.com/questions/22841424/accessing-mulemessage-and-a-flow-variable-from-java-component?rq=1这个答案看起来更好 – tortoise 2014-11-22 18:42:58

1

你有多种选择:

@Mule Annotation

一个参数注入的注释,可以在组件条目 点和变压器的方法来使用,这个注解可以用于在消息有效载荷上执行 Mule表达式,并将结果传递给方法中的 。

另外:

@InboundHeaders Annotation

此注释控制如何在当前消息的入站报头 通入的方法。注释支持,地图,列表,单个 标题,通配符和可选条目。它可用于组件 入口点和@Transformer方法。

结合可能使用:

@Payload Annotation

甲参数注入注释可以在组件条目被用于 点和使用所述@Transformer 注释中定义变压器的方法,该注释控制通过执行消息有效载荷的自动转换以匹配注释的参数类型,当前消息有效载荷 如何传递到方法中。例如,如果 期望XML文档,则可将其注入到 组件入口点,并自动转换为 org.wc3.dom.Document。

您也可以按照不同的响应中所述实现Callable,但这样做会比此解决方案表达得多。

相关问题