获取消息 body 的实际 class
Getting the actual class of a message body
我正在将不同 object 的列表传递给骆驼路线。我希望将每条消息的 body 拆分为一个 object 并将 body 的 class 放入 header 中(使用处理器)。
from("direct:in")
.split(body())
.process(new JmsTypeHeaderProcessor(body().getClass().getName()))
.to("mock:out");
我正在这样尝试...
@Produce(uri = "direct:in") private ProducerTemplate template;
@EndpointInject(uri = "mock:out") private MockEndpoint endpoint;
@Test
public void testRoute() throws Exception {
List<Object> list = new ArrayList<>();
list.add("String");
list.add(Integer.valueOf(1));
list.add(Boolean.FALSE);
template.sendBody(list);
for (Exchange ex : endpoint.getExchanges()) {
System.out.println("JMSType=" + ex.getIn().getHeader("JMSType"));
}
}
当我 运行 我发现我实际上有 headers
JMSType=org.apache.camel.builder.ValueBuilder
JMSType=org.apache.camel.builder.ValueBuilder
JMSType=org.apache.camel.builder.ValueBuilder
而我所期望的,也希望
JMSType=java.lang.String
JMSType=java.lang.Integer
JMSType=java.lang.Boolean
获得实际 body 的 class 需要什么?
顺便说一句。我可以看到 log("body.class")
returns 我想要的东西,但我无法理解它的工作原理或根据我的需要调整它。
Camel 路线是在路线构建器中设计的,代码是 运行 一次,用于设置路线。
所以这段代码
.process(new JmsTypeHeaderProcessor(body().getClass().getName()))
被调用一次,而 body().getClass() returns ValueBuilder
因为那是在设计时在 DSL 中用来指定 body 等的东西
如果您想访问 运行time 消息正文,请从处理器的 process
方法的 Exchange
中获取。那就是运行时间消息,然后你就可以得到正文了。
我正在将不同 object 的列表传递给骆驼路线。我希望将每条消息的 body 拆分为一个 object 并将 body 的 class 放入 header 中(使用处理器)。
from("direct:in")
.split(body())
.process(new JmsTypeHeaderProcessor(body().getClass().getName()))
.to("mock:out");
我正在这样尝试...
@Produce(uri = "direct:in") private ProducerTemplate template;
@EndpointInject(uri = "mock:out") private MockEndpoint endpoint;
@Test
public void testRoute() throws Exception {
List<Object> list = new ArrayList<>();
list.add("String");
list.add(Integer.valueOf(1));
list.add(Boolean.FALSE);
template.sendBody(list);
for (Exchange ex : endpoint.getExchanges()) {
System.out.println("JMSType=" + ex.getIn().getHeader("JMSType"));
}
}
当我 运行 我发现我实际上有 headers
JMSType=org.apache.camel.builder.ValueBuilder
JMSType=org.apache.camel.builder.ValueBuilder
JMSType=org.apache.camel.builder.ValueBuilder
而我所期望的,也希望
JMSType=java.lang.String
JMSType=java.lang.Integer
JMSType=java.lang.Boolean
获得实际 body 的 class 需要什么?
顺便说一句。我可以看到 log("body.class")
returns 我想要的东西,但我无法理解它的工作原理或根据我的需要调整它。
Camel 路线是在路线构建器中设计的,代码是 运行 一次,用于设置路线。
所以这段代码
.process(new JmsTypeHeaderProcessor(body().getClass().getName()))
被调用一次,而 body().getClass() returns ValueBuilder
因为那是在设计时在 DSL 中用来指定 body 等的东西
如果您想访问 运行time 消息正文,请从处理器的 process
方法的 Exchange
中获取。那就是运行时间消息,然后你就可以得到正文了。