Thanks for the tip! On 15 July 2016 at 00:55, Claus Ibsen <claus.ib...@gmail.com> wrote:
> Hi > > See about deep-clone at: http://camel.apache.org/multicast > > On Thu, Jul 14, 2016 at 6:54 PM, Matt Sicker <boa...@gmail.com> wrote: > > I think I found my issue with the mutable headers in question. It appears > > that the headers of a message are shared amongst the exchanges sent out > in > > a multicast, so modifying a header in one route affects the other route. > If > > that's not the case, then I've discovered some very strange behavior. > > > > On 6 July 2016 at 20:34, Tadayoshi Sato <sato.tadayo...@gmail.com> > wrote: > > > >> Hi, > >> > >> It's just an idea off the top of my head, but what about providing a > parity > >> check header in company with the header you want to be immutable. I.e. > >> > >> YOUR_HEADER = "Do not change!" > >> YOUR_HEADER_MD5 = "fef4de21954d4b9f1b3e61ed153799da" > >> > >> or > >> > >> YOUR_HEADER_HASH = "md5:fef4de21954d4b9f1b3e61ed153799da" > >> > >> When making use of this header, you can always validate if it's not > changed > >> in the routes. > >> > >> On Wed, Jul 6, 2016 at 6:03 AM, Matt Sicker <boa...@gmail.com> wrote: > >> > >> > Let me give a more specific use case. Path parameters from rest-dsl > are > >> > passed in as message headers. I don't want any route to accidentally > >> > overwrite or modify those headers as they're useful for the entire > >> > lifecycle of that message. > >> > > >> > On 5 July 2016 at 16:00, Matt Sicker <boa...@gmail.com> wrote: > >> > > >> > > The exact use case is preventing developers from [inadvertently] > >> > modifying > >> > > headers or properties that are used before and after a particular > >> > subroute. > >> > > > >> > > On 5 July 2016 at 15:57, souciance < > souciance.eqdam.ras...@gmail.com> > >> > > wrote: > >> > > > >> > >> I guess the question is, why would different routes split over > >> different > >> > >> bundles want to write over the same header/property? What's the > case > >> > here? > >> > >> Surely it cannot be just to prevent accidents by developers because > >> what > >> > >> would be their reason to write over that header? > >> > >> > >> > >> I think it is better to agree on a naming and some sort of other > >> > >> convention > >> > >> and stick to that because I don't think there is a way to to make a > >> > header > >> > >> immutable. I guess an ugly solution would be to save the header in > a > >> map > >> > >> and give the key name something very unique. > >> > >> > >> > >> On Tue, Jul 5, 2016 at 10:48 PM, Matt Sicker [via Camel] < > >> > >> ml-node+s465427n578481...@n5.nabble.com> wrote: > >> > >> > >> > >> > Please let me know if you think of anything! > >> > >> > > >> > >> > On 5 July 2016 at 15:16, Brad Johnson <[hidden email] > >> > >> > <http:///user/SendEmail.jtp?type=node&node=5784811&i=0>> wrote: > >> > >> > > >> > >> > > I certainly understand the impulse and think it is spot on but > >> can't > >> > >> > think > >> > >> > > of how to do it with headers. Claim checks might work but they > >> are > >> > >> > really > >> > >> > > for reducing overhead of data and not for locking like that but > >> that > >> > >> > might > >> > >> > > be a viable solution depending on the exact problem. > >> > >> > > > >> > >> > > Thanks Matt, this is going to be stuck in my head now. I'll > >> > probably > >> > >> > dream > >> > >> > > of an answer of some sort tonight. > >> > >> > > > >> > >> > > Brad > >> > >> > > > >> > >> > > On Tue, Jul 5, 2016 at 3:02 PM, Matt Sicker <[hidden email] > >> > >> > <http:///user/SendEmail.jtp?type=node&node=5784811&i=1>> wrote: > >> > >> > > > >> > >> > > > My use case is basically to help prevent bugs where a header > or > >> > >> > exchange > >> > >> > > > property gets modified. Some of my routes in question branch > out > >> > >> into > >> > >> > > > several different bundles, and it is difficult to enforce > >> > contracts > >> > >> > that > >> > >> > > > way amongst several developers with varying levels of Camel > >> > >> expertise. > >> > >> > > > Similar to how one might use final variables to prevent > people > >> > from > >> > >> > > > reassigning them, this could be a final header that prevents > >> > people > >> > >> > from > >> > >> > > > reusing them for things. > >> > >> > > > > >> > >> > > > On 5 July 2016 at 14:22, Brad Johnson <[hidden email] > >> > >> > <http:///user/SendEmail.jtp?type=node&node=5784811&i=2>> > >> > >> > > > wrote: > >> > >> > > > > >> > >> > > > > That's what I figured. I'd have to look at the Map > >> > implementation > >> > >> > of > >> > >> > > the > >> > >> > > > > exchange but as far as I know there isn't a way to make it > a > >> > write > >> > >> > once > >> > >> > > > > only operation. It's just a map of some sort. There might > >> be a > >> > >> way > >> > >> > to > >> > >> > > > do > >> > >> > > > > it with transactions but I'm not an expert there. I > generally > >> > use > >> > >> > > > headers > >> > >> > > > > but in reality should probably be using exchange properties > >> more > >> > >> > often. > >> > >> > > > > > >> > >> > > > > > >> > >> > > > > > >> > >> > > > > >> > >> > > > >> > >> > > >> > >> > >> > > >> > http://stackoverflow.com/questions/10330998/passing-values-between-processors-in-apache-camel > >> > >> > > > > > >> > >> > > > > Almost any mechanism I can think of off the top of my head > >> could > >> > >> be > >> > >> > > > > subverted by someone who wanted to or who didn't understand > >> that > >> > >> the > >> > >> > > > value > >> > >> > > > > associated with the bean shouldn't be modified. For > example, > >> > you > >> > >> > could > >> > >> > > > > create a bean that you associate with your header that > stores > >> > data > >> > >> > but > >> > >> > > > also > >> > >> > > > > returns a UUID. That UUID could be stored in another > header > >> and > >> > >> > > sometime > >> > >> > > > > later in the routes you could verify that the bean stored > >> under > >> > >> your > >> > >> > > key > >> > >> > > > > returns the same UUID as the header indicates. But that > >> > wouldn't > >> > >> > stop > >> > >> > > > > someone from changing the bean stored to the key and it > >> wouldn't > >> > >> > > prevent > >> > >> > > > > them from updating the UUID to a new bean they might > create. > >> > >> > > > > > >> > >> > > > > On Tue, Jul 5, 2016 at 1:49 PM, Matt Sicker <[hidden email] > >> > >> > <http:///user/SendEmail.jtp?type=node&node=5784811&i=3>> wrote: > >> > >> > > > > > >> > >> > > > > > I'm thinking of an idea to prevent a header from being > >> > modified > >> > >> by > >> > >> > > > other > >> > >> > > > > > parts of the route. A sort of contract if you will. > >> > >> > > > > > > >> > >> > > > > > On 5 July 2016 at 13:01, Brad Johnson <[hidden email] > >> > >> > <http:///user/SendEmail.jtp?type=node&node=5784811&i=4>> > >> > >> > > > > > wrote: > >> > >> > > > > > > >> > >> > > > > > > Is there another part of your process that is > specifically > >> > >> > changing > >> > >> > > > the > >> > >> > > > > > > header or are you more concerned about it being > >> consistently > >> > >> > there > >> > >> > > > > across > >> > >> > > > > > > routes? Nothing will change it automatically if it is > >> your > >> > >> > header. > >> > >> > > > I > >> > >> > > > > > > don't remember the actual implementation but > conceptually > >> it > >> > >> is > >> > >> > > just > >> > >> > > > a > >> > >> > > > > > > hastable/map with key/values. If you set header with > some > >> > >> > specific > >> > >> > > > key > >> > >> > > > > > > then nothing else will change it. > >> > >> > > > > > > > >> > >> > > > > > > As an example, I use a camel splitter and then set a > >> header > >> > >> with > >> > >> > > the > >> > >> > > > > > > splitter index so that I can use it in another route > later > >> > to > >> > >> > > > > reassemble > >> > >> > > > > > > with the resequencer. > >> > >> > > > > > > > >> > >> > > > > > > <split> > >> > >> > > > > > > <simple>${body}</simple> > >> > >> > > > > > > <setHeader headerName="seqnum"> > >> > >> > > > > > > <simple>exchangeProperty.CamelSplitIndex</simple> > >> > >> > > > > > > </setHeader> > >> > >> > > > > > > ... > >> > >> > > > > > > > >> > >> > > > > > > The "seqnum" is just a key that I'm defining. I could > >> > >> obviously > >> > >> > > call > >> > >> > > > > it > >> > >> > > > > > > anything "sequenceNumber" or whatever but when I > access it > >> > >> later > >> > >> > > that > >> > >> > > > > > > header is available on the exchange. If I explicitly > >> change > >> > >> what > >> > >> > > the > >> > >> > > > > map > >> > >> > > > > > is > >> > >> > > > > > > storing for "seqnum" then it will be different because > I > >> > can't > >> > >> > make > >> > >> > > > the > >> > >> > > > > > > header map itself immutable. > >> > >> > > > > > > > >> > >> > > > > > > > >> > >> > > > > > > On Tue, Jul 5, 2016 at 10:33 AM, Matt Sicker <[hidden > >> email] > >> > >> > <http:///user/SendEmail.jtp?type=node&node=5784811&i=5>> > >> > >> > > > wrote: > >> > >> > > > > > > > >> > >> > > > > > > > As in once I set the header, nothing can change the > >> header > >> > >> > during > >> > >> > > > the > >> > >> > > > > > > > lifecycle of the message during a route. Same for an > >> > >> exchange > >> > >> > > > > property. > >> > >> > > > > > > > > >> > >> > > > > > > > -- > >> > >> > > > > > > > Matt Sicker <[hidden email] > >> > >> > <http:///user/SendEmail.jtp?type=node&node=5784811&i=6>> > >> > >> > > > > > > > > >> > >> > > > > > > > >> > >> > > > > > > >> > >> > > > > > > >> > >> > > > > > > >> > >> > > > > > -- > >> > >> > > > > > Matt Sicker <[hidden email] > >> > >> > <http:///user/SendEmail.jtp?type=node&node=5784811&i=7>> > >> > >> > > > > > > >> > >> > > > > > >> > >> > > > > >> > >> > > > > >> > >> > > > > >> > >> > > > -- > >> > >> > > > Matt Sicker <[hidden email] > >> > >> > <http:///user/SendEmail.jtp?type=node&node=5784811&i=8>> > >> > >> > > > > >> > >> > > > >> > >> > > >> > >> > > >> > >> > > >> > >> > -- > >> > >> > Matt Sicker <[hidden email] > >> > >> > <http:///user/SendEmail.jtp?type=node&node=5784811&i=9>> > >> > >> > > >> > >> > > >> > >> > ------------------------------ > >> > >> > If you reply to this email, your message will be added to the > >> > discussion > >> > >> > below: > >> > >> > > >> > >> > > >> > >> > >> > > >> > http://camel.465427.n5.nabble.com/Is-it-possible-to-make-a-message-header-or-property-immutable-tp5784800p5784811.html > >> > >> > To start a new topic under Camel - Users, email > >> > >> > ml-node+s465427n465428...@n5.nabble.com > >> > >> > To unsubscribe from Camel - Users, click here > >> > >> > < > >> > >> > >> > > >> > http://camel.465427.n5.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=465428&code=c291Y2lhbmNlLmVxZGFtLnJhc2h0aUBnbWFpbC5jb218NDY1NDI4fDE1MzI5MTE2NTY= > >> > >> > > >> > >> > . > >> > >> > NAML > >> > >> > < > >> > >> > >> > > >> > http://camel.465427.n5.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml > >> > >> > > >> > >> > > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> -- > >> > >> View this message in context: > >> > >> > >> > > >> > http://camel.465427.n5.nabble.com/Is-it-possible-to-make-a-message-header-or-property-immutable-tp5784800p5784812.html > >> > >> Sent from the Camel - Users mailing list archive at Nabble.com. > >> > > > >> > > > >> > > > >> > > > >> > > -- > >> > > Matt Sicker <boa...@gmail.com> > >> > > > >> > > >> > > >> > > >> > -- > >> > Matt Sicker <boa...@gmail.com> > >> > > >> > > > > > > > > -- > > Matt Sicker <boa...@gmail.com> > > > > -- > Claus Ibsen > ----------------- > http://davsclaus.com @davsclaus > Camel in Action 2: https://www.manning.com/ibsen2 > -- Matt Sicker <boa...@gmail.com>