Java 8 и Apache Camel 2.19.5 здесь. У меня есть следующие процессоры bean:
@Component("foobarResolver")
public class FoobarResolver {
public List<Foobar> resolve(Fizzbuzz fizzbuzz) {
List<Foobar> foobars = new ArrayList<Foobar>();
// Use some logic in here to make the fizzbuzz populate the foobars list.
return foobars;
}
}
@Component("fizzbuzzProcessor")
public class FizzbuzzProcessor {
public FizzbuzzOutput process(Fizzbuzz fizzbuzz) {
// Blah whatever
}
}
И следующий верблюжий маршрут:
<route id="fizzbuzzHandler">
<!-- XML '<fizzbuzz>' messages get sent here by an upstream process -->
<from uri="activemq:fizzbuzzes"/>
<!-- Use XStream to deserialize the XML into a 'Fizzbuzz' POJO instance -->
<unmarshal ref="xs"/>
<split>
<method ref="bean:foobarResolver"/>
<to uri="activemq:analyze"/>
</split>
<!-- Now assuming our body is once again the Fizzbuzz we can just continue as normal... -->
<!-- Process the fizzbuzz -->
<to uri="bean:fizzbuzzProcessor"/>
<!-- Send fizzbuzzProcessor's output to 'output' queue -->
<to uri="activemq:output"/>
</route>
Итак, как вы можете видеть, десериализованный экземпляр Fizzbuzz
отправляется процессору компонента FoobarResolver
, который превращает этот экземпляр в List<Foobar>
, а затем отправляет каждый Foobar
в очередь analyze
, по одному одним. По крайней мере, в этом и заключается смысл моего дизайна!
Что мне любопытно, так это: после разделения, чем становится тело обмена? «Возвращается» ли он обратно к Fizzbuzz
(что я и хочу), или тело обмена теперь List<Foobar>
, производимое FoobarResolver
(что НЕ то, что я хочу)? Если тело теперь List<Foobar>
, как я могу перенастроить вещи так, чтобы FizzbuzzProcessor
получил вместо него Fizzbuzz
?