2015-09-07 26 views
0

我有一个简单的骆驼路线定义,将消耗一个XML消息。如何从骆驼体中检索特定内容以传递给骆驼路径中的bean方法?

的路线如下:

from("from-endpoint").bean(myBean, "method1").log("$body")to("to-endpoint) 

的bean定义如下:

class MyBean { 
    public void method1(String value) { 
     //so something with value 
    } 
} 

示例XML消息如下:

<name> 
    <value>new value<value> 
</name> 

我想找回属性“值”的值并将其传递给我的bean方法。我想在我的路由中检索属性值,并让我的bean实现清除对xml结构的引用。我也想确保路由仍然传播原始主体,因此我不希望有一个bean从上面提取XML值并将其传递给下游。

希望这是明确的。

回答

2

之前将其发送到豆你可以设置一个标头值:

.setHeader("value", xpath("/name/value/text()")) 

然后

class MyBean { 
    public void method1(Exchange exchange) { 
     System.out.println("MyBean - " + exchange.getIn().getHeader("value", String.class)); 
    } 
} 
+0

这是我不想把我的豆现在需要有XML结构的理解的做法。我想在路线定义本身内处理这个问题。请参考我的问题中的最后一段。 – Mahesh

+0

对不起,我编辑了答案。 – J2B

0

如果你不希望在即将到来的净荷履行任何形式的XML功能那么你可以使用JAXB或XStream解析器解组传入的负载,然后你将拥有一个POJO来处理而不是XML操作。同样在你的路线中,如果你没有在交换机身上设置任何东西,那么有效载荷保持不变。

1
class MyBean implements Processor { 
public void method1(Exchange exchange)throws Exception { 

Foo foo = exchange.getIn().getBody(foo.class); 
    value = foo.getvalue(); 
    //so something with value 
} 
} 
1
class MyBean implements Processor { 

    @override 
    public void process(Exchange exchange)throws Exception { 

    Foo foo = exchange.getIn().getBody(foo.class); 
     value = foo.getvalue(); 
    } 
}