2022-12-14 14:04:56,317 DEBUG [org.apa.cam.com.jms.EndpointMessageListener] (Camel (camel-1) thread #8 - JmsConsumer[my.queue]) activemq://queue:my.queue consumer received JMS message: ActiveMQTextMessage {commandId = 13, responseRequired = true, messageId = ID:xxxx, originalDestination = null,..., content = org.apache.activemq.util.ByteSequence@11ba49fe, ..., text = { "foo": "bar", "x...y": false}}
Notice that text is truncated. How can I see the full text?
EndpointMessageListener
has this log line:
LOG.debug("{} consumer received JMS message: {}", this.endpoint, message);
And for message
of type javax.jms.Message
, the toString() method implementation of org.apache.activemq.command.ActiveMQTextMessage
is:
public String toString() {
try {
String text = this.text;
if (text == null) {
text = this.decodeContent(this.getContent());
}
if (text != null) {
text = MarshallingSupport.truncate64(text);
HashMap<String, Object> overrideFields = new HashMap();
overrideFields.put("text", text);
return super.toString(overrideFields);
}
} catch (JMSException var3) {
}
return super.toString();
}
where it always truncates to 60 chars.
public static String truncate64(String text) {
if (text.length() > 63) {
String var10000 = text.substring(0, 45);
text = var10000 + "..." + text.substring(text.length() - 12);
}
return text;
}
Can I find out what the complete message was?
You could for instance test if the received JMSMessage is of type text, and if so, cast it and invoke the getText()
method rather than the generic toString()
:
if ( message instanceof javax.jms.TextMessage) {
TextMessage tm = (TextMessage) message;
LOG.debug("{} consumer received JMS message: {}", this.endpoint, tm.getText());
}
Beware it may also arrive as Bytes- or Stream-Message