[ https://issues.apache.org/activemq/browse/AMQ-681?page=comments#action_36013 ]
Andrew Lusk commented on AMQ-681: --------------------------------- Also, it would be nice to be able to configure separate encoding defaults for each channel, for example, to allow clients to send messages loosely encoded but receive messages tightly encoded. > Tight encoding not the default; wire format negotiation needs work > ------------------------------------------------------------------ > > Key: AMQ-681 > URL: https://issues.apache.org/activemq/browse/AMQ-681 > Project: ActiveMQ > Type: Bug > Components: Broker > Reporter: Andrew Lusk > > > In OpenWireFormat.java, tightEncoding defaults to false, when, since it's the > historical format, it should be true. > Wire format negotiation isn't really negotiation. Since the broker defaults > to loose encoding, it sends a loosely-encoded WireFormatInfo message to > connecting clients, and expects loosely-encoded WireFormatInfo messages from > them. This not only enforces that clients implement loose marshalling and > unmarshalling, but fails when the client sends a well-formatted but > tightly-encoded WireFormatInfo message. > The broker fails in this case because it assumes that the client and broker > both have the same concept of what encoding is the default, when in actuality > the encoding of a message should be part of the actual message, allowing the > broker to handle clients who prefer either format (and may not have the other > format even implemented). > The broker should also only ever send messages in the format asked for by the > client - it should wait to send a WireFormatInfo until it has received one > from the client indicating its preferred format. > I suggest two changes: > * adding a leading byte to all messages indicating their encoding > * the broker should wait to send a WireFormatInfo until it has received one > from the connecting client, whose preferences override all broker defaults > for that connection > The requirement that the server and client have shared, non-obvious > information from the beginning (like which encoding is default) causes ugly > problem in the broker like this, when it gets a message of a type it didn't > expect: > Exception in thread "tcp:///127.0.0.1:54316" > java.lang.IllegalArgumentException: Invalid version: 1297154048, could not > load org.apache.activemq.openwire.v1297154048.MarshallerFactory -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: https://issues.apache.org/activemq/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira
