I made some progress with this. In my SynchronizationAdapter, I had been calling exchange.getIn().setHeader(…) - I’d never looked to see if there was an “out” message. Once I changed this to set the header on the out message, the headers started showing up where I wanted them.
Now I’m down to error handling. If something goes wrong during the acknowledgement, I can set an exception on the exchange and than the route knows that the exchanged failed - I tested this with an onCompletion.onFailureOnly element. However, the exchanged passed to the onCompletion.onFailureOnly element does NOT have the exception set - so I’m not sure how the route is supposed to tell what happened. Do I need to do more than just set the exception on the exchange? Also, is there a way to get Camel’s error handling to kick-in after the SyncronizationAdapter sets the exception on the exchange? > On Sep 6, 2016, at 5:06 PM, Quinn Stevenson <[email protected]> > wrote: > > I’m struggling with this, and I can’t seem to get what I’m after. > > I added a SynchronizationAdapter (via addOnCompletion), but the exchange > passed to the onComplete portion of the route still doesn’t have the headers > I’m setting in the Syncronizationadapter. I’ve tried setting the header in > both the onAfterRoute and onComplete methods, but no luck. The only place > that seems to work is if I add the header in the onBeforeRoute method, but I > don’t have enough information at that point to set the header correctly. > > The other thing I’d tried previously that I thought would work was simply > setting the headers in the Consumer, after it called > getProcessor().process(exchange) - but that doesn’t work either. I’m not > sure why that doesn’t work - I set headers before I call > getProcessor().process(exchange), and they behave as I’d expect. However, > anything I do to the exchange after I call getProcessor().process(exchange) > doesn’t seem to have any effect? > > Maybe I need to do something different than just call > getProcessor().process(exchange)? Somehow intercept the flow of the exchange > after the last processor in the route, but before before camel does whatever > it does that makes my copy of the exchange irrelevant? > > >> On Sep 6, 2016, at 2:02 PM, Claus Ibsen <[email protected]> wrote: >> >> There is an addOnCompletion on the exchange you can use. Then your >> onCompletion can implement that interface, or extend >> SynchronizationAdapter >> >> On Tue, Sep 6, 2016 at 9:52 PM, Quinn Stevenson >> <[email protected]> wrote: >>> Thank you for the prompt reply :-) >>> >>> This sounds like exactly what I need, but I’m a little unclear about how to >>> implement it. I tried creating a UnitOfWork, adding a Synchronization, and >>> then setting the UnitOfWork on the exchange when I create it, but my >>> Synchronization isn’t getting called. >>> >>> is there another component somewhere that does something similar that I >>> could look at? >>> >>> >>>> On Sep 6, 2016, at 1:25 PM, Claus Ibsen <[email protected]> wrote: >>>> >>>> If you talk about UoW completions with Synchronization: >>>> org.apache.camel.spi.Synchronization >>>> >>>> Then you can implement Ordered, and then set the value to be HIGHEST >>>> so this one is run before the others. >>>> >>>> >>>> On Tue, Sep 6, 2016 at 9:20 PM, Quinn Stevenson >>>> <[email protected]> wrote: >>>>> I would like to enhance the camel-mllp component to set a message header >>>>> containing the MLLP Acknowledgement when the component is automatically >>>>> generating the acknowledgment. This code would need to execute after the >>>>> last element in the main route, but before any onCompletion elements are >>>>> invoked, but I can’t figure out the right way to make this happen. >>>>> >>>>> Can someone point me in the right direction? >>>>> >>>>> >>>> >>>> >>>> >>>> -- >>>> Claus Ibsen >>>> ----------------- >>>> http://davsclaus.com @davsclaus >>>> Camel in Action 2: https://www.manning.com/ibsen2 >>> >> >> >> >> -- >> Claus Ibsen >> ----------------- >> http://davsclaus.com @davsclaus >> Camel in Action 2: https://www.manning.com/ibsen2 >
