Тело моего сообщения содержит HashMap.
Я разделил это сообщение по его записи. Набор:
.from(FROM)
.aggregate(...)
// create an iterable
.transform(simple("${in.body.entrySet()}"))
// split over the Iterable
.split(body())
.process(new ReadMapEntry())
.to(TO)
.end()
.end();
Теперь пытаюсь получить эти записи в процессоре. Ближайший я пытался это разыграть. Я нашел похожие примеры с использованием ArrayList, но я не могу заставить их работать для этого ... в работах такого рода, но это вызвало непроверенное предупреждение о приведении типов из-за обобщений Map.Entry.
public void process(final Exchange ex) throws Exception
{
Map.Entry<A, B> entry = (Map.Entry<A, B>) ex.getIn().getBody(Map.Entry.class);
(...)
}
Решение
Моя цель здесь состояла в том, чтобы избежать предупреждения, связанного с приведением к наследуемому классу. В итоге я использовал ключевое слово simple
. Таким образом, я мог передать значение карты в процессор (таким образом, избегая необязательного предупреждения приведения) и получить доступ к ключу через заголовок.
.from(FROM)
.aggregate(...)
.split(simple("${in.body.entrySet}"))
.setHeader(KEY_VALUE_AS_HEADER, simple("${body.getKey}"))
.setBody(simple("${body.getValue}"))
.process(new ReadMapEntry())
.to(TO)
.end()
.end();
public void process(final Exchange ex) throws Exception
{
A value = ex.getIn().getBody(A.class);
B key = ex.getIn().getHeader(KEY_VALUE_AS_HEADER, B.class);
(...)
}