You would be able to call reencode on the message. there was an issue that if you didn't have a property, the applicationProperties wouldn't be set..
I added an example, and fixed that issue here: https://github.com/apache/activemq-artemis/pull/1584 Notice you would need to do the else part in case of a core protocol message.. (I didn't do that part here). On Wed, Oct 11, 2017 at 4:46 AM, Matthias Hanisch <matthias.hani...@camline.com> wrote: > Hi, > > let me explain a similar use case what we would use to show that there is a > demand for modification of application properties: > > We would like to enrich an AMQP message with additional application > properties for better filtering and message routing. > > As far as I understood from the discussion below this is not possible by > calling > message.putStringProperty("new_prop", "new_prop_value") > > I tried to do this in an AmqpInterceptor but the listener still gets the > original message without this added property. And therefore the listener > can also not create a message selector based on the new application > properties. > > I also checked the spec and I could not find a reference that application > properties are immutable. For "pure" properties this seems to be true > according to section 3.2.4 of the spec. > > The only way I can think of is to use a listener which creates a new > message with the enriched context and uploads it back to the broker. This > would duplicate a lot of messages and would impact performance. > > A more efficient way to realize this feature would be greatly appreciated. > > Best regards, > Matthias > > P.S.: I just subscribed to this mailing list so I was not able to reply > directly to the mail below. Sorry about that. > > > ---------- Weitergeleitete Nachricht ---------- >> From: Clebert Suconic <clebert.suco...@gmail.com> >> To: users@activemq.apache.org >> Cc: >> Bcc: >> Date: Tue, 10 Oct 2017 20:18:38 -0400 >> Subject: Re: How to put "properties" on a message so they are accessible >> later >> We could add a new method call to the plugin... something like >> replaceMessage. >> >> With that on hand you could then convert the AMQPMessage to a Core >> Message using message.toCore().. and return the transformed message. >> >> >> The message wouldn't be an AMQP message any longer from that point >> on.. it would eventually be converted back to whatever other message >> protocols it leads on the other side... it would of course have some >> performance impact but it would work. >> >> On Tue, Oct 10, 2017 at 5:55 PM, Timothy Bish <tabish...@gmail.com> wrote: >> > On 10/10/2017 05:20 PM, Harrison Tarr wrote: >> >> >> >> Thanks for the quick reply. Is there any way to change something on the >> >> message that my consumer could then access? Maybe not >> ApplicationProperties >> >> but something else? >> > >> > >> > Nothing that would be accessible via the JMS client API. >> > >> > >> >> Harrison >> >> >> >> -----Original Message----- >> >> From: Timothy Bish [mailto:tabish...@gmail.com] >> >> Sent: Tuesday, October 10, 2017 2:11 PM >> >> To: users@activemq.apache.org >> >> Subject: Re: How to put "properties" on a message so they are accessible >> >> later >> >> >> >> On 10/10/2017 05:06 PM, Harrison Tarr wrote: >> >>> >> >>> Hello again, >> >>> >> >>> I wanted to follow up on this as I've done some more experimenting. >> >>> I've found that when I use the Core protocol or Openwire protocol, >> >>> everything works as expected. I am able to use the "setStringProperty" >> >>> in my ActiveMQServerPlugin and it adds a header that I can then access >> >>> in my Camel consumer code. However, if I try to add a property to a >> >>> message that was sent using the AMQP protocol, it does not stay set on >> >>> the message. It appears to me that this is because the AMQP message is >> >>> more protected? Maybe it has all of the data in an immutable >> >>> ByteBuffer? I've tried using the "reencode" method on the >> >>> org.apache.activemq.artemis.protocol.amqp.broker.AMQPMessage class, >> >>> but it causes an error; it can't parse the message back out, it says >> >>> something about an unknown constructor. (Being handled here >> >>> https://github.com/apache/qpid-jms/blob/master/qpid-jms-client/src/mai >> >>> n/java/org/apache/qpid/jms/provider/amqp/AmqpConsumer.java#L496) >> >> >> >> AMQP ApplicationProperties are immutable so you cannot change or add to >> >> them in flight, that would violate the AMQP specification. >> >> >> >>> Justin, I've looked at the remoting interceptors. I think I decided >> >>> against using them because it does not expose as much information to >> me as I >> >>> wanted. I'm specifically trying to take the authentication credentials >> and >> >>> then create some kind of authentication token to attach to the message >> that >> >>> I can then use in my consuming code. >> >>> >> >>> Regards, >> >>> Harrison Tarr >> >>> >> >>> >> >>> -----Original Message----- >> >>> From: Justin Bertram [mailto:jbert...@redhat.com] >> >>> Sent: Tuesday, September 12, 2017 3:28 PM >> >>> To: users@activemq.apache.org >> >>> Subject: Re: How to put "properties" on a message so they are >> >>> accessible later >> >>> >> >>> I'm not terribly familiar with the ActiveMQServerPlugin functionality >> in >> >>> this regard, but I do know that you can make such modifications to >> messages >> >>> using remoting interceptors. Have you explored that possibility? >> >>> >> >>> >> >>> Justin >> >>> >> >>> On Tue, Sep 12, 2017 at 3:45 PM, Harrison Tarr >> >>> <harrison.t...@connexta.com> >> >>> wrote: >> >>> >> >>>> Right now I'm using Artemis 2.2.0. >> >>>> I've done a bit more research and experimentation. It seems that I >> >>>> can set a header in Camel, send the message to a queue/topic hosted >> >>>> on Artemis and read the header as a "stringProperty". The header keys >> >>>> also show up when I do a "getProperties" call. However, if I try to >> >>>> overwrite that field in my ActiveMQServerPlugin (specifically the >> >>>> beforeSend call), the change is not propagated to Camel. IE, if I >> send a >> >>>> message with the header "testHeader" >> >>>> with a value of "testValue", I can see, in Artemis, "testHeader" as a >> >>>> property on the message with the value of "testValue". If I then try >> >>>> to overwrite that value with "newValue", when I access the message >> >>>> and its headers in the consumer, the header is still "testHeader" >> >>>> with the value of "testValue", whereas I expect it to be "testHeader" >> >>>> with a value of "newValue". >> >>>> >> >>>> Harrison Tarr >> >>>> >> >>>> -----Original Message----- >> >>>> From: tbai...@gmail.com [mailto:tbai...@gmail.com] On Behalf Of Tim >> >>>> Bain >> >>>> Sent: Monday, September 11, 2017 6:26 PM >> >>>> To: ActiveMQ Users <users@activemq.apache.org> >> >>>> Subject: RE: How to put "properties" on a message so they are >> >>>> accessible later >> >>>> >> >>>> To be clear, you're asking about doing this in Artemis, not ActiveMQ >> >>>> 5.x, right? What version of Artemis? >> >>>> >> >>>> On Sep 11, 2017 2:48 PM, "Harrison Tarr" <harrison.t...@connexta.com> >> >>>> wrote: >> >>>> >> >>>>> I just wanted to follow up: Does anyone know how to put an >> >>>>> attribute/property on a message in an ActiveMQServerPlugin that I >> >>>>> can then pull out of the message in Camel? >> >>>>> >> >>>>> Regards, >> >>>>> Harrison Tarr >> >>>>> >> >>>>> -----Original Message----- >> >>>>> From: Harrison Tarr [mailto:harrison.t...@connexta.com] >> >>>>> Sent: Wednesday, September 6, 2017 8:56 AM >> >>>>> To: users@activemq.apache.org >> >>>>> Subject: How to put "properties" on a message so they are accessible >> >>>>> later >> >>>>> >> >>>>> Hi, >> >>>>> >> >>>>> I'm trying to put a StringProperty on a Message in an >> >>>>> ActiveMQServerPlugin. As far as I can tell, the property gets set >> >>>>> correctly. Later, I'm trying to retrieve the property from a Camel >> >>>>> Exchange. I don't see my property anywhere on the Exchange. I did >> >>>>> notice that it looks like the properties "firedTime" and >> >>>>> "breadcrumbId," which I think come from Artemis, do appear on the >> >>>>> Camel Exchange, which makes me think there is some way to propagate >> >>>>> my >> >>>> >> >>>> property from Artemis to Camel. >> >>>>> >> >>>>> Regards, >> >>>>> Harrison Tarr >> >>>>> >> >> -- >> >> Tim Bish >> >> twitter: @tabish121 >> >> blog: http://timbish.blogspot.com/ >> >> >> > >> > -- >> > Tim Bish >> > twitter: @tabish121 >> > blog: http://timbish.blogspot.com/ >> > >> >> >> >> -- >> Clebert Suconic >> >> >> > > -- > camLine GmbH > 85238 Petershausen, Industriering 4a, Deutschland > Amtsgericht München HRB 88821 > Geschäftsführer: Heinz Linsmaier (CEO), Bernhard Jofer, Georg Ruetz > <http://www.camline.com/en/camline/events.html> > <http://www.camline.com/en/camline/events.html> > <http://www.camline.com/en/camline/events.html> -- Clebert Suconic