1
votes

I have a xml where I'm using the split tag to process in Spring DSL. What I'm doing is basically seaching for a value in the xml, when I find this value I need to get the value of another tag, child of the same element and save to a header. This operations seems simple, but I can't recover my headers outside split and I need to. I tried with headers and properties and the result was the same.

Please help me to figure out what I'm doing wrong.

Code sample:

<route>
...
<split>
    <xpath>//FatherTag/ChildTag</xpath>
    <to uri="direct:processingRoute"/>
</split>

</route>

<route>
<from uri="direct:processingRoute"/>
<choice>
<when>
<simple>....</simple>
    <setHeader headerName="foo">
        <constant>test</constant>
    </setHeader>
</when>
</choice>

</route>
1
first of all, you are sure that the header inside the split is being set by your choice/when? Do you have some trace-level logs for us to see? I suspect it is because after the split, the resulting Exchange is the last exchange processed by the split unless you use an aggregation strategyDakota Brown
Well, I ended up creating a processor and did the xml parsing in java. But thanks, next time I'll go for AggregationStrategy.king_nl_ds

1 Answers

1
votes

You need to define an AggregationStrategy. From Camel Splitter:

What the Splitter returns

Camel 2.3 and newer:

The Splitter will by default return the original input message.

For all versions

You can override this by suppling your own strategy as an AggregationStrategy.

Your AggregationStrategy needs to check the appropriate header set for each child tag and pass it on the resulting Exchange output message for the split operation.