/** * Post-process the given response message before it will be sent. * <p>The default implementation sets the response's correlation id * to the request message's correlation id, if any; otherwise to the * request message id. * @param request the original incoming JMS message * @param response the outgoing JMS message about to be sent * @throws JMSException if thrown by JMS API methods * @see javax.jms.Message#setJMSCorrelationID */ protected void postProcessResponse(Message request, Message response) throws JMSException { String correlation = request.getJMSCorrelationID(); if (correlation == null) { correlation = request.getJMSMessageID(); } response.setJMSCorrelationID(correlation); }
} catch (JMSException e) { String corrIDString = foreign.getJMSCorrelationID(); if (corrIDString != null) { setJMSCorrelationID(corrIDString); String corrIDString = foreign.getJMSCorrelationID(); if (corrIDString != null) { setJMSCorrelationID(corrIDString);
/** * Create the invocation result response message. * <p>The default implementation creates a JMS ObjectMessage for the given * RemoteInvocationResult object. It sets the response's correlation id * to the request message's correlation id, if any; otherwise to the * request message id. * @param request the original request message * @param session the JMS session to use * @param result the invocation result * @return the message response to send * @throws javax.jms.JMSException if creating the message failed */ protected Message createResponseMessage(Message request, Session session, RemoteInvocationResult result) throws JMSException { Message response = this.messageConverter.toMessage(result, session); String correlation = request.getJMSCorrelationID(); if (correlation == null) { correlation = request.getJMSMessageID(); } response.setJMSCorrelationID(correlation); return response; }
sbuf.append(m.getJMSCorrelationID());
try { try { String correlationId = jmsMessage.getJMSCorrelationID(); if (correlationId != null) { headers.put(JmsHeaders.CORRELATION_ID, correlationId);
private Map<String, String> extractMessageHeaders(final Message message) throws JMSException { final Map<String, String> messageHeaders = new HashMap<>(); messageHeaders.put(JmsHeaders.DELIVERY_MODE, String.valueOf(message.getJMSDeliveryMode())); messageHeaders.put(JmsHeaders.EXPIRATION, String.valueOf(message.getJMSExpiration())); messageHeaders.put(JmsHeaders.PRIORITY, String.valueOf(message.getJMSPriority())); messageHeaders.put(JmsHeaders.REDELIVERED, String.valueOf(message.getJMSRedelivered())); messageHeaders.put(JmsHeaders.TIMESTAMP, String.valueOf(message.getJMSTimestamp())); messageHeaders.put(JmsHeaders.CORRELATION_ID, message.getJMSCorrelationID()); messageHeaders.put(JmsHeaders.MESSAGE_ID, message.getJMSMessageID()); messageHeaders.put(JmsHeaders.TYPE, message.getJMSType()); String replyToDestinationName = this.retrieveDestinationName(message.getJMSReplyTo(), JmsHeaders.REPLY_TO); if (replyToDestinationName != null) { messageHeaders.put(JmsHeaders.REPLY_TO, replyToDestinationName); } String destinationName = this.retrieveDestinationName(message.getJMSDestination(), JmsHeaders.DESTINATION); if (destinationName != null) { messageHeaders.put(JmsHeaders.DESTINATION, destinationName); } return messageHeaders; }
@Test public void jmsCorrelationIdMappedFromHeader() throws JMSException { String jmsCorrelationId = "ABC-123"; Message<String> message = initBuilder() .setHeader(JmsHeaders.CORRELATION_ID, jmsCorrelationId).build(); javax.jms.Message jmsMessage = new StubTextMessage(); mapper.fromHeaders(message.getHeaders(), jmsMessage); assertNotNull(jmsMessage.getJMSCorrelationID()); assertEquals(jmsCorrelationId, jmsMessage.getJMSCorrelationID()); }
@Test public void jmsCorrelationIdIgnoredIfIncorrectType() throws JMSException { Message<String> message = initBuilder() .setHeader(JmsHeaders.CORRELATION_ID, new Date()).build(); javax.jms.Message jmsMessage = new StubTextMessage(); mapper.fromHeaders(message.getHeaders(), jmsMessage); assertNull(jmsMessage.getJMSCorrelationID()); }
if (message.getJMSCorrelationID() != null) { attributes.put(ATTRIBUTE_PREFIX + JMS_CORRELATION_ID, message.getJMSCorrelationID());
@Test public void jmsCorrelationIdNumberConvertsToString() throws JMSException { Message<String> message = initBuilder() .setHeader(JmsHeaders.CORRELATION_ID, 123).build(); javax.jms.Message jmsMessage = new StubTextMessage(); mapper.fromHeaders(message.getHeaders(), jmsMessage); assertEquals("123", jmsMessage.getJMSCorrelationID()); }
@Test public void attemptToWriteDisallowedCorrelationIdNumberPropertyIsNotFatal() throws JMSException { Message<String> message = initBuilder() .setHeader(JmsHeaders.CORRELATION_ID, 123) .setHeader("foo", "bar") .build(); javax.jms.Message jmsMessage = new StubTextMessage() { @Override public void setJMSCorrelationID(String correlationId) throws JMSException { throw new JMSException("illegal property"); } }; mapper.fromHeaders(message.getHeaders(), jmsMessage); assertNull(jmsMessage.getJMSCorrelationID()); assertNotNull(jmsMessage.getStringProperty("foo")); assertEquals("bar", jmsMessage.getStringProperty("foo")); }
@Test public void attemptToWriteDisallowedCorrelationIdStringPropertyIsNotFatal() throws JMSException { Message<String> message = initBuilder() .setHeader(JmsHeaders.CORRELATION_ID, "abc") .setHeader("foo", "bar") .build(); javax.jms.Message jmsMessage = new StubTextMessage() { @Override public void setJMSCorrelationID(String correlationId) throws JMSException { throw new JMSException("illegal property"); } }; mapper.fromHeaders(message.getHeaders(), jmsMessage); assertNull(jmsMessage.getJMSCorrelationID()); assertNotNull(jmsMessage.getStringProperty("foo")); assertEquals("bar", jmsMessage.getStringProperty("foo")); }
/** * Copies the standard JMS and user defined properties from the givem * message to the specified message * * @param fromMessage the message to take the properties from * @param toMessage the message to add the properties to * @throws JMSException */ public static void copyProperties(Message fromMessage, Message toMessage) throws JMSException { toMessage.setJMSMessageID(fromMessage.getJMSMessageID()); toMessage.setJMSCorrelationID(fromMessage.getJMSCorrelationID()); toMessage.setJMSReplyTo(transformDestination(fromMessage.getJMSReplyTo())); toMessage.setJMSDestination(transformDestination(fromMessage.getJMSDestination())); toMessage.setJMSDeliveryMode(fromMessage.getJMSDeliveryMode()); toMessage.setJMSRedelivered(fromMessage.getJMSRedelivered()); toMessage.setJMSType(fromMessage.getJMSType()); toMessage.setJMSExpiration(fromMessage.getJMSExpiration()); toMessage.setJMSPriority(fromMessage.getJMSPriority()); toMessage.setJMSTimestamp(fromMessage.getJMSTimestamp()); Enumeration propertyNames = fromMessage.getPropertyNames(); while (propertyNames.hasMoreElements()) { String name = propertyNames.nextElement().toString(); Object obj = fromMessage.getObjectProperty(name); toMessage.setObjectProperty(name, obj); } } }
private void copyCorrelationIdFromRequestToReply(javax.jms.Message requestMessage, javax.jms.Message replyMessage) throws JMSException { if (this.correlationKey != null) { if (this.correlationKey.equals("JMSCorrelationID")) { replyMessage.setJMSCorrelationID(requestMessage.getJMSCorrelationID()); } else { String value = requestMessage.getStringProperty(this.correlationKey); if (value != null) { replyMessage.setStringProperty(this.correlationKey, value); } else if (this.logger.isWarnEnabled()) { this.logger.warn("No property value available on request Message for correlationKey '" + this.correlationKey + "'"); } } } else if (replyMessage.getJMSCorrelationID() == null) { replyMessage.setJMSCorrelationID(requestMessage.getJMSMessageID()); } }
@Test public void testJmsCorrelationIdMappedFromHeader() throws JMSException { String jmsCorrelationId = "ABC-123"; Message<String> message = MessageBuilder.withPayload("test") .setHeader(JmsHeaders.CORRELATION_ID, jmsCorrelationId).build(); DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper(); javax.jms.Message jmsMessage = new StubTextMessage(); mapper.fromHeaders(message.getHeaders(), jmsMessage); assertNotNull(jmsMessage.getJMSCorrelationID()); assertEquals(jmsCorrelationId, jmsMessage.getJMSCorrelationID()); }
@Test public void testJmsCorrelationIdNumberConvertsToString() throws JMSException { Message<String> message = MessageBuilder.withPayload("test") .setHeader(JmsHeaders.CORRELATION_ID, new Integer(123)).build(); DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper(); javax.jms.Message jmsMessage = new StubTextMessage(); mapper.fromHeaders(message.getHeaders(), jmsMessage); assertEquals("123", jmsMessage.getJMSCorrelationID()); }
@Test public void testJmsCorrelationIdIgnoredIfIncorrectType() throws JMSException { Message<String> message = MessageBuilder.withPayload("test") .setHeader(JmsHeaders.CORRELATION_ID, new Date()).build(); DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper(); javax.jms.Message jmsMessage = new StubTextMessage(); mapper.fromHeaders(message.getHeaders(), jmsMessage); assertNull(jmsMessage.getJMSCorrelationID()); }
@Test public void attemptToWriteDisallowedCorrelationIdNumberPropertyIsNotFatal() throws JMSException { Message<String> message = MessageBuilder.withPayload("test") .setHeader(JmsHeaders.CORRELATION_ID, new Integer(123)) .setHeader("foo", "bar") .build(); DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper(); javax.jms.Message jmsMessage = new StubTextMessage() { @Override public void setJMSCorrelationID(String correlationId) throws JMSException { throw new JMSException("illegal property"); } }; mapper.fromHeaders(message.getHeaders(), jmsMessage); assertNull(jmsMessage.getJMSCorrelationID()); assertNotNull(jmsMessage.getStringProperty("foo")); assertEquals("bar", jmsMessage.getStringProperty("foo")); }
@Test public void attemptToWriteDisallowedCorrelationIdStringPropertyIsNotFatal() throws JMSException { Message<String> message = MessageBuilder.withPayload("test") .setHeader(JmsHeaders.CORRELATION_ID, "abc") .setHeader("foo", "bar") .build(); DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper(); javax.jms.Message jmsMessage = new StubTextMessage() { @Override public void setJMSCorrelationID(String correlationId) throws JMSException { throw new JMSException("illegal property"); } }; mapper.fromHeaders(message.getHeaders(), jmsMessage); assertNull(jmsMessage.getJMSCorrelationID()); assertNotNull(jmsMessage.getStringProperty("foo")); assertEquals("bar", jmsMessage.getStringProperty("foo")); }
@Test public void testWithReply() throws Exception { QueueChannel replies = new QueueChannel(); this.gateway1.setOutputChannel(replies); this.gateway1.start(); this.gateway1.handleMessage(MessageBuilder.withPayload("foo") .setHeader(JmsHeaders.CORRELATION_ID, "baz")// make sure it's restored in case we're from an upstream gw .build()); JmsTemplate template = new JmsTemplate(this.ccf); template.setReceiveTimeout(10000); final Message received = template.receive("asyncTest1"); assertNotNull(received); template.send(received.getJMSReplyTo(), (MessageCreator) session -> { TextMessage textMessage = session.createTextMessage("bar"); textMessage.setJMSCorrelationID(received.getJMSCorrelationID()); return textMessage; }); org.springframework.messaging.Message<?> reply = replies.receive(10000); assertNotNull(reply); assertEquals("bar", reply.getPayload()); assertEquals("baz", reply.getHeaders().get(JmsHeaders.CORRELATION_ID)); this.gateway1.stop(); }