Subpackage rearrangements within 4.1's jms-messaging alignment
Issue: SPR-10873
This commit is contained in:
parent
1fadd1c954
commit
fa4f51c5d0
|
@ -48,7 +48,7 @@ import org.springframework.messaging.handler.annotation.MessageMapping;
|
||||||
* arguments including the support of validation</li>
|
* arguments including the support of validation</li>
|
||||||
* <li>{@link org.springframework.messaging.handler.annotation.Header @Header}-annotated method
|
* <li>{@link org.springframework.messaging.handler.annotation.Header @Header}-annotated method
|
||||||
* arguments to extract a specific header value, including standard JMS headers defined by
|
* arguments to extract a specific header value, including standard JMS headers defined by
|
||||||
* {@link org.springframework.jms.support.converter.JmsHeaders JmsHeaders}</li>
|
* {@link org.springframework.jms.support.JmsHeaders JmsHeaders}</li>
|
||||||
* <li>{@link org.springframework.messaging.handler.annotation.Headers @Headers}-annotated
|
* <li>{@link org.springframework.messaging.handler.annotation.Headers @Headers}-annotated
|
||||||
* argument that must also be assignable to {@link java.util.Map} for getting access to all
|
* argument that must also be assignable to {@link java.util.Map} for getting access to all
|
||||||
* headers.</li>
|
* headers.</li>
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.springframework.jms.messaging;
|
package org.springframework.jms.core;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
|
@ -14,21 +14,17 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.springframework.jms.messaging;
|
package org.springframework.jms.core;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import javax.jms.Destination;
|
import javax.jms.Destination;
|
||||||
import javax.jms.JMSException;
|
import javax.jms.JMSException;
|
||||||
import javax.jms.Session;
|
import javax.jms.Session;
|
||||||
|
|
||||||
import org.springframework.beans.factory.InitializingBean;
|
import org.springframework.beans.factory.InitializingBean;
|
||||||
import org.springframework.jms.core.JmsTemplate;
|
|
||||||
import org.springframework.jms.core.MessageCreator;
|
|
||||||
import org.springframework.jms.support.converter.MessageConversionException;
|
import org.springframework.jms.support.converter.MessageConversionException;
|
||||||
import org.springframework.jms.support.converter.MessageConverter;
|
import org.springframework.jms.support.converter.MessageConverter;
|
||||||
import org.springframework.jms.support.converter.MessagingMessageConverter;
|
import org.springframework.jms.support.converter.MessagingMessageConverter;
|
||||||
import org.springframework.jms.support.converter.SimpleJmsHeaderMapper;
|
|
||||||
import org.springframework.jms.support.converter.SimpleMessageConverter;
|
import org.springframework.jms.support.converter.SimpleMessageConverter;
|
||||||
import org.springframework.messaging.Message;
|
import org.springframework.messaging.Message;
|
||||||
import org.springframework.messaging.MessagingException;
|
import org.springframework.messaging.MessagingException;
|
||||||
|
@ -42,17 +38,20 @@ import org.springframework.util.Assert;
|
||||||
* @author Stephane Nicoll
|
* @author Stephane Nicoll
|
||||||
* @since 4.1
|
* @since 4.1
|
||||||
*/
|
*/
|
||||||
public class JmsMessagingTemplate
|
public class JmsMessagingTemplate extends AbstractMessageReceivingTemplate<Destination>
|
||||||
extends AbstractMessageReceivingTemplate<Destination>
|
|
||||||
implements JmsMessageOperations, InitializingBean {
|
implements JmsMessageOperations, InitializingBean {
|
||||||
|
|
||||||
private JmsTemplate jmsTemplate;
|
private JmsTemplate jmsTemplate;
|
||||||
|
|
||||||
private MessageConverter jmsMessageConverter = new MessagingMessageConverter(
|
private MessageConverter jmsMessageConverter = new MessagingMessageConverter();
|
||||||
new SimpleMessageConverter(), new SimpleJmsHeaderMapper());
|
|
||||||
|
|
||||||
private String defaultDestinationName;
|
private String defaultDestinationName;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor for use with bean properties.
|
||||||
|
* Requires {@link #setJmsTemplate} to be called.
|
||||||
|
*/
|
||||||
public JmsMessagingTemplate() {
|
public JmsMessagingTemplate() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,6 +63,7 @@ public class JmsMessagingTemplate
|
||||||
this.jmsTemplate = jmsTemplate;
|
this.jmsTemplate = jmsTemplate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the {@link JmsTemplate} to use.
|
* Set the {@link JmsTemplate} to use.
|
||||||
*/
|
*/
|
||||||
|
@ -79,7 +79,6 @@ public class JmsMessagingTemplate
|
||||||
* <p>Consider configuring a {@link MessagingMessageConverter} with a different
|
* <p>Consider configuring a {@link MessagingMessageConverter} with a different
|
||||||
* {@link MessagingMessageConverter#setPayloadConverter(MessageConverter) payload converter}
|
* {@link MessagingMessageConverter#setPayloadConverter(MessageConverter) payload converter}
|
||||||
* for more advanced scenario.
|
* for more advanced scenario.
|
||||||
*
|
|
||||||
* @see org.springframework.jms.support.converter.MessagingMessageConverter
|
* @see org.springframework.jms.support.converter.MessagingMessageConverter
|
||||||
*/
|
*/
|
||||||
public void setJmsMessageConverter(MessageConverter jmsMessageConverter) {
|
public void setJmsMessageConverter(MessageConverter jmsMessageConverter) {
|
||||||
|
@ -150,18 +149,21 @@ public class JmsMessagingTemplate
|
||||||
@Override
|
@Override
|
||||||
public void convertAndSend(String destinationName, Object payload, Map<String, Object> headers)
|
public void convertAndSend(String destinationName, Object payload, Map<String, Object> headers)
|
||||||
throws MessagingException {
|
throws MessagingException {
|
||||||
|
|
||||||
convertAndSend(destinationName, payload, headers, null);
|
convertAndSend(destinationName, payload, headers, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void convertAndSend(String destinationName, Object payload, MessagePostProcessor postProcessor)
|
public void convertAndSend(String destinationName, Object payload, MessagePostProcessor postProcessor)
|
||||||
throws MessagingException {
|
throws MessagingException {
|
||||||
|
|
||||||
convertAndSend(destinationName, payload, null, postProcessor);
|
convertAndSend(destinationName, payload, null, postProcessor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void convertAndSend(String destinationName, Object payload, Map<String, Object> headers,
|
public void convertAndSend(String destinationName, Object payload, Map<String, Object> headers,
|
||||||
MessagePostProcessor postProcessor) throws MessagingException {
|
MessagePostProcessor postProcessor) throws MessagingException {
|
||||||
|
|
||||||
Message<?> message = doConvert(payload, headers, postProcessor);
|
Message<?> message = doConvert(payload, headers, postProcessor);
|
||||||
send(destinationName, message);
|
send(destinationName, message);
|
||||||
}
|
}
|
||||||
|
@ -206,31 +208,29 @@ public class JmsMessagingTemplate
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void doSend(Destination destination, Message<?> message) {
|
protected void doSend(Destination destination, Message<?> message) {
|
||||||
jmsTemplate.send(destination, new MessagingMessageCreator(message, this.jmsMessageConverter));
|
this.jmsTemplate.send(destination, new MessagingMessageCreator(message, this.jmsMessageConverter));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void doSend(String destinationName, Message<?> message) {
|
protected void doSend(String destinationName, Message<?> message) {
|
||||||
jmsTemplate.send(destinationName, new MessagingMessageCreator(message, this.jmsMessageConverter));
|
this.jmsTemplate.send(destinationName, new MessagingMessageCreator(message, this.jmsMessageConverter));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Message<?> doReceive(Destination destination) {
|
protected Message<?> doReceive(Destination destination) {
|
||||||
javax.jms.Message jmsMessage = jmsTemplate.receive(destination);
|
javax.jms.Message jmsMessage = this.jmsTemplate.receive(destination);
|
||||||
return doConvert(jmsMessage);
|
return doConvert(jmsMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Message<?> doReceive(String destinationName) {
|
protected Message<?> doReceive(String destinationName) {
|
||||||
javax.jms.Message jmsMessage = jmsTemplate.receive(destinationName);
|
javax.jms.Message jmsMessage = this.jmsTemplate.receive(destinationName);
|
||||||
return doConvert(jmsMessage);
|
return doConvert(jmsMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String getRequiredDefaultDestinationName() {
|
protected String getRequiredDefaultDestinationName() {
|
||||||
String name = getDefaultDestinationName();
|
String name = getDefaultDestinationName();
|
||||||
if (name == null) {
|
if (name == null) {
|
||||||
throw new IllegalStateException(
|
throw new IllegalStateException("No 'defaultDestination' or 'defaultDestinationName' specified. " +
|
||||||
"No 'defaultDestination' or 'defaultDestinationName' specified. " +
|
"Check configuration of JmsMessagingTemplate.");
|
||||||
"Check configuration of JmsMessagingTemplate."
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
@ -240,10 +240,10 @@ public class JmsMessagingTemplate
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
return (Message<?>) jmsMessageConverter.fromMessage(message);
|
return (Message<?>) this.jmsMessageConverter.fromMessage(message);
|
||||||
}
|
}
|
||||||
catch (JMSException e) {
|
catch (JMSException ex) {
|
||||||
throw new MessageConversionException("Could not convert '" + message + "'", e);
|
throw new MessageConversionException("Could not convert '" + message + "'", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -254,14 +254,14 @@ public class JmsMessagingTemplate
|
||||||
|
|
||||||
private final MessageConverter messageConverter;
|
private final MessageConverter messageConverter;
|
||||||
|
|
||||||
private MessagingMessageCreator(Message<?> message, MessageConverter messageConverter) {
|
public MessagingMessageCreator(Message<?> message, MessageConverter messageConverter) {
|
||||||
this.message = message;
|
this.message = message;
|
||||||
this.messageConverter = messageConverter;
|
this.messageConverter = messageConverter;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public javax.jms.Message createMessage(Session session) throws JMSException {
|
public javax.jms.Message createMessage(Session session) throws JMSException {
|
||||||
return messageConverter.toMessage(message, session);
|
return this.messageConverter.toMessage(this.message, session);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,12 +28,12 @@ import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
import org.springframework.jms.listener.SessionAwareMessageListener;
|
import org.springframework.jms.listener.SessionAwareMessageListener;
|
||||||
|
import org.springframework.jms.support.JmsHeaderMapper;
|
||||||
import org.springframework.jms.support.JmsUtils;
|
import org.springframework.jms.support.JmsUtils;
|
||||||
import org.springframework.jms.support.converter.JmsHeaderMapper;
|
import org.springframework.jms.support.SimpleJmsHeaderMapper;
|
||||||
import org.springframework.jms.support.converter.MessageConversionException;
|
import org.springframework.jms.support.converter.MessageConversionException;
|
||||||
import org.springframework.jms.support.converter.MessageConverter;
|
import org.springframework.jms.support.converter.MessageConverter;
|
||||||
import org.springframework.jms.support.converter.MessagingMessageConverter;
|
import org.springframework.jms.support.converter.MessagingMessageConverter;
|
||||||
import org.springframework.jms.support.converter.SimpleJmsHeaderMapper;
|
|
||||||
import org.springframework.jms.support.converter.SimpleMessageConverter;
|
import org.springframework.jms.support.converter.SimpleMessageConverter;
|
||||||
import org.springframework.jms.support.destination.DestinationResolver;
|
import org.springframework.jms.support.destination.DestinationResolver;
|
||||||
import org.springframework.jms.support.destination.DynamicDestinationResolver;
|
import org.springframework.jms.support.destination.DynamicDestinationResolver;
|
||||||
|
@ -59,18 +59,11 @@ public abstract class AbstractAdaptableMessageListener
|
||||||
|
|
||||||
private DestinationResolver destinationResolver = new DynamicDestinationResolver();
|
private DestinationResolver destinationResolver = new DynamicDestinationResolver();
|
||||||
|
|
||||||
private MessageConverter messageConverter;
|
private MessageConverter messageConverter = new SimpleMessageConverter();
|
||||||
|
|
||||||
private MessagingMessageConverterAdapter messagingMessageConverter = new MessagingMessageConverterAdapter();
|
private final MessagingMessageConverterAdapter messagingMessageConverter = new MessagingMessageConverterAdapter();
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a new instance with default settings.
|
|
||||||
*/
|
|
||||||
protected AbstractAdaptableMessageListener() {
|
|
||||||
initDefaultStrategies();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the default destination to send response messages to. This will be applied
|
* Set the default destination to send response messages to. This will be applied
|
||||||
* in case of a request message that does not carry a "JMSReplyTo" field.
|
* in case of a request message that does not carry a "JMSReplyTo" field.
|
||||||
|
@ -153,14 +146,9 @@ public abstract class AbstractAdaptableMessageListener
|
||||||
return this.messageConverter;
|
return this.messageConverter;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected MessageConverter getMessagingMessageConverter() {
|
|
||||||
return this.messagingMessageConverter;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the {@link JmsHeaderMapper} implementation to use to map the
|
* Set the {@link JmsHeaderMapper} implementation to use to map the standard
|
||||||
* standard JMS headers. By default {@link SimpleJmsHeaderMapper} is
|
* JMS headers. By default, a {@link SimpleJmsHeaderMapper} is used.
|
||||||
* used
|
|
||||||
* @see SimpleJmsHeaderMapper
|
* @see SimpleJmsHeaderMapper
|
||||||
*/
|
*/
|
||||||
public void setHeaderMapper(JmsHeaderMapper headerMapper) {
|
public void setHeaderMapper(JmsHeaderMapper headerMapper) {
|
||||||
|
@ -168,6 +156,15 @@ public abstract class AbstractAdaptableMessageListener
|
||||||
this.messagingMessageConverter.setHeaderMapper(headerMapper);
|
this.messagingMessageConverter.setHeaderMapper(headerMapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the{@link MessagingMessageConverter} for this listener,
|
||||||
|
* being able to convert {@link org.springframework.messaging.Message}.
|
||||||
|
*/
|
||||||
|
protected final MessagingMessageConverter getMessagingMessageConverter() {
|
||||||
|
return this.messagingMessageConverter;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Standard JMS {@link MessageListener} entry point.
|
* Standard JMS {@link MessageListener} entry point.
|
||||||
* <p>Delegates the message to the target listener method, with appropriate
|
* <p>Delegates the message to the target listener method, with appropriate
|
||||||
|
@ -191,15 +188,6 @@ public abstract class AbstractAdaptableMessageListener
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize the default implementations for the adapter's strategies.
|
|
||||||
* @see #setMessageConverter
|
|
||||||
* @see org.springframework.jms.support.converter.SimpleMessageConverter
|
|
||||||
*/
|
|
||||||
protected void initDefaultStrategies() {
|
|
||||||
setMessageConverter(new SimpleMessageConverter());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle the given exception that arose during listener execution.
|
* Handle the given exception that arose during listener execution.
|
||||||
* The default implementation logs the exception at error level.
|
* The default implementation logs the exception at error level.
|
||||||
|
@ -228,8 +216,8 @@ public abstract class AbstractAdaptableMessageListener
|
||||||
}
|
}
|
||||||
return message;
|
return message;
|
||||||
}
|
}
|
||||||
catch (JMSException e) {
|
catch (JMSException ex) {
|
||||||
throw new MessageConversionException("Could not unmarshal message", e);
|
throw new MessageConversionException("Could not unmarshal message", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -257,8 +245,8 @@ public abstract class AbstractAdaptableMessageListener
|
||||||
Destination destination = getResponseDestination(request, response, session);
|
Destination destination = getResponseDestination(request, response, session);
|
||||||
sendResponse(session, destination, response);
|
sendResponse(session, destination, response);
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception ex) {
|
||||||
throw new ReplyFailureException("Failed to send reply with payload '" + result + "'", e);
|
throw new ReplyFailureException("Failed to send reply with payload '" + result + "'", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -410,6 +398,7 @@ public abstract class AbstractAdaptableMessageListener
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Internal class combining a destination name
|
* Internal class combining a destination name
|
||||||
* and its target destination type (queue or topic).
|
* and its target destination type (queue or topic).
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
package org.springframework.jms.listener.adapter;
|
package org.springframework.jms.listener.adapter;
|
||||||
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
|
||||||
import javax.jms.JMSException;
|
import javax.jms.JMSException;
|
||||||
import javax.jms.Message;
|
import javax.jms.Message;
|
||||||
import javax.jms.MessageListener;
|
import javax.jms.MessageListener;
|
||||||
|
@ -137,7 +136,6 @@ public class MessageListenerAdapter extends AbstractAdaptableMessageListener
|
||||||
* Create a new {@link MessageListenerAdapter} with default settings.
|
* Create a new {@link MessageListenerAdapter} with default settings.
|
||||||
*/
|
*/
|
||||||
public MessageListenerAdapter() {
|
public MessageListenerAdapter() {
|
||||||
initDefaultStrategies();
|
|
||||||
this.delegate = this;
|
this.delegate = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -146,7 +144,6 @@ public class MessageListenerAdapter extends AbstractAdaptableMessageListener
|
||||||
* @param delegate the delegate object
|
* @param delegate the delegate object
|
||||||
*/
|
*/
|
||||||
public MessageListenerAdapter(Object delegate) {
|
public MessageListenerAdapter(Object delegate) {
|
||||||
initDefaultStrategies();
|
|
||||||
setDelegate(delegate);
|
setDelegate(delegate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ package org.springframework.jms.listener.adapter;
|
||||||
import javax.jms.JMSException;
|
import javax.jms.JMSException;
|
||||||
import javax.jms.Session;
|
import javax.jms.Session;
|
||||||
|
|
||||||
import org.springframework.jms.support.converter.JmsHeaderMapper;
|
import org.springframework.jms.support.JmsHeaderMapper;
|
||||||
import org.springframework.jms.support.converter.MessageConversionException;
|
import org.springframework.jms.support.converter.MessageConversionException;
|
||||||
import org.springframework.messaging.Message;
|
import org.springframework.messaging.Message;
|
||||||
import org.springframework.messaging.MessagingException;
|
import org.springframework.messaging.MessagingException;
|
||||||
|
@ -56,6 +56,7 @@ public class MessagingMessageListenerAdapter extends AbstractAdaptableMessageLis
|
||||||
this.handlerMethod = handlerMethod;
|
this.handlerMethod = handlerMethod;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onMessage(javax.jms.Message jmsMessage, Session session) throws JMSException {
|
public void onMessage(javax.jms.Message jmsMessage, Session session) throws JMSException {
|
||||||
Message<?> message = toMessagingMessage(jmsMessage);
|
Message<?> message = toMessagingMessage(jmsMessage);
|
||||||
|
@ -76,34 +77,34 @@ public class MessagingMessageListenerAdapter extends AbstractAdaptableMessageLis
|
||||||
try {
|
try {
|
||||||
return (Message<?>) getMessagingMessageConverter().fromMessage(jmsMessage);
|
return (Message<?>) getMessagingMessageConverter().fromMessage(jmsMessage);
|
||||||
}
|
}
|
||||||
catch (JMSException e) {
|
catch (JMSException ex) {
|
||||||
throw new MessageConversionException("Could not unmarshal message", e);
|
throw new MessageConversionException("Could not unmarshal message", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Invoke the handler, wrapping any exception to a {@link ListenerExecutionFailedException} with
|
* Invoke the handler, wrapping any exception to a {@link ListenerExecutionFailedException}
|
||||||
* a dedicated error message.
|
* with a dedicated error message.
|
||||||
*/
|
*/
|
||||||
private Object invokeHandler(javax.jms.Message jmsMessage, Session session, Message<?> message) {
|
private Object invokeHandler(javax.jms.Message jmsMessage, Session session, Message<?> message) {
|
||||||
try {
|
try {
|
||||||
return handlerMethod.invoke(message, jmsMessage, session);
|
return this.handlerMethod.invoke(message, jmsMessage, session);
|
||||||
}
|
}
|
||||||
catch (MessagingException e) {
|
catch (MessagingException ex) {
|
||||||
throw new ListenerExecutionFailedException(createMessagingErrorMessage("Listener method could not " +
|
throw new ListenerExecutionFailedException(createMessagingErrorMessage("Listener method could not " +
|
||||||
"be invoked with the incoming message"), e);
|
"be invoked with the incoming message"), ex);
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception ex) {
|
||||||
throw new ListenerExecutionFailedException("Listener method '"
|
throw new ListenerExecutionFailedException("Listener method '" +
|
||||||
+ handlerMethod.getMethod().toGenericString() + "' threw exception", e);
|
this.handlerMethod.getMethod().toGenericString() + "' threw exception", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private String createMessagingErrorMessage(String description) {
|
private String createMessagingErrorMessage(String description) {
|
||||||
StringBuilder sb = new StringBuilder(description).append("\n")
|
StringBuilder sb = new StringBuilder(description).append("\n")
|
||||||
.append("Endpoint handler details:\n")
|
.append("Endpoint handler details:\n")
|
||||||
.append("Method [").append(handlerMethod.getMethod()).append("]\n")
|
.append("Method [").append(this.handlerMethod.getMethod()).append("]\n")
|
||||||
.append("Bean [").append(handlerMethod.getBean()).append("]\n");
|
.append("Bean [").append(this.handlerMethod.getBean()).append("]\n");
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,20 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2002-2014 the original author or authors.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* JMS integration for Spring's messaging module.
|
|
||||||
*/
|
|
||||||
package org.springframework.jms.messaging;
|
|
|
@ -14,11 +14,11 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.springframework.jms.support.converter;
|
package org.springframework.jms.support;
|
||||||
|
|
||||||
import javax.jms.Message;
|
import javax.jms.Message;
|
||||||
|
|
||||||
import org.springframework.messaging.mapping.HeaderMapper;
|
import org.springframework.messaging.support.HeaderMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Strategy interface for mapping messaging Message headers to an outbound
|
* Strategy interface for mapping messaging Message headers to an outbound
|
|
@ -14,11 +14,11 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.springframework.jms.support.converter;
|
package org.springframework.jms.support;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Pre-defined names and prefixes to be used for setting and/or retrieving JMS
|
* Pre-defined names and prefixes to be used for setting and/or retrieving
|
||||||
* attributes from/to integration Message Headers.
|
* JMS attributes from/to generic message headers.
|
||||||
*
|
*
|
||||||
* @author Mark Fisher
|
* @author Mark Fisher
|
||||||
* @author Stephane Nicoll
|
* @author Stephane Nicoll
|
||||||
|
@ -43,7 +43,7 @@ public interface JmsHeaders {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Name of the destination (topic or queue) of the message.
|
* Name of the destination (topic or queue) of the message.
|
||||||
* <p>Read only value.
|
* <p>Read-only value.
|
||||||
* @see javax.jms.Message#getJMSDestination()
|
* @see javax.jms.Message#getJMSDestination()
|
||||||
* @see javax.jms.Destination
|
* @see javax.jms.Destination
|
||||||
* @see javax.jms.Queue
|
* @see javax.jms.Queue
|
||||||
|
@ -53,7 +53,7 @@ public interface JmsHeaders {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Distribution mode.
|
* Distribution mode.
|
||||||
* <p>Read only value.
|
* <p>Read-only value.
|
||||||
* @see javax.jms.Message#getJMSDeliveryMode()
|
* @see javax.jms.Message#getJMSDeliveryMode()
|
||||||
* @see javax.jms.DeliveryMode
|
* @see javax.jms.DeliveryMode
|
||||||
*/
|
*/
|
||||||
|
@ -61,21 +61,21 @@ public interface JmsHeaders {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Message expiration date and time.
|
* Message expiration date and time.
|
||||||
* <p>Read only value.
|
* <p>Read-only value.
|
||||||
* @see javax.jms.Message#getJMSExpiration()
|
* @see javax.jms.Message#getJMSExpiration()
|
||||||
*/
|
*/
|
||||||
public static final String EXPIRATION = PREFIX + "expiration";
|
public static final String EXPIRATION = PREFIX + "expiration";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unique Identifier for a message.
|
* Unique Identifier for a message.
|
||||||
* <p>Read only value.
|
* <p>Read-only value.
|
||||||
* @see javax.jms.Message#getJMSMessageID()
|
* @see javax.jms.Message#getJMSMessageID()
|
||||||
*/
|
*/
|
||||||
public static final String MESSAGE_ID = PREFIX + "messageId";
|
public static final String MESSAGE_ID = PREFIX + "messageId";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The message priority level.
|
* The message priority level.
|
||||||
* <p>Read only value.
|
* <p>Read-only value.
|
||||||
* @see javax.jms.Message#getJMSPriority()
|
* @see javax.jms.Message#getJMSPriority()
|
||||||
*/
|
*/
|
||||||
public static final String PRIORITY = PREFIX + "priority";
|
public static final String PRIORITY = PREFIX + "priority";
|
||||||
|
@ -90,7 +90,7 @@ public interface JmsHeaders {
|
||||||
/**
|
/**
|
||||||
* Specify if the message was resent. This occurs when a message
|
* Specify if the message was resent. This occurs when a message
|
||||||
* consumer fails to acknowledge the message reception.
|
* consumer fails to acknowledge the message reception.
|
||||||
* <p>Read only value.
|
* <p>Read-only value.
|
||||||
* @see javax.jms.Message#getJMSRedelivered()
|
* @see javax.jms.Message#getJMSRedelivered()
|
||||||
*/
|
*/
|
||||||
public static final String REDELIVERED = PREFIX + "redelivered";
|
public static final String REDELIVERED = PREFIX + "redelivered";
|
||||||
|
@ -104,7 +104,7 @@ public interface JmsHeaders {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Date and time of the message sending operation.
|
* Date and time of the message sending operation.
|
||||||
* <p>Read only value.
|
* <p>Read-only value.
|
||||||
* @see javax.jms.Message#getJMSTimestamp()
|
* @see javax.jms.Message#getJMSTimestamp()
|
||||||
*/
|
*/
|
||||||
public static final String TIMESTAMP = PREFIX + "timestamp";
|
public static final String TIMESTAMP = PREFIX + "timestamp";
|
|
@ -18,10 +18,8 @@ package org.springframework.jms.support;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import javax.jms.Destination;
|
import javax.jms.Destination;
|
||||||
|
|
||||||
import org.springframework.jms.support.converter.JmsHeaders;
|
|
||||||
import org.springframework.messaging.Message;
|
import org.springframework.messaging.Message;
|
||||||
import org.springframework.messaging.support.NativeMessageHeaderAccessor;
|
import org.springframework.messaging.support.NativeMessageHeaderAccessor;
|
||||||
|
|
||||||
|
@ -43,14 +41,6 @@ public class JmsMessageHeaderAccessor extends NativeMessageHeaderAccessor {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create {@link JmsMessageHeaderAccessor} from the headers of an existing message.
|
|
||||||
*/
|
|
||||||
public static JmsMessageHeaderAccessor wrap(Message<?> message) {
|
|
||||||
return new JmsMessageHeaderAccessor(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the {@link JmsHeaders#CORRELATION_ID correlationId}.
|
* Return the {@link JmsHeaders#CORRELATION_ID correlationId}.
|
||||||
* @see JmsHeaders#CORRELATION_ID
|
* @see JmsHeaders#CORRELATION_ID
|
||||||
|
@ -131,4 +121,14 @@ public class JmsMessageHeaderAccessor extends NativeMessageHeaderAccessor {
|
||||||
return (Long) getHeader(JmsHeaders.TIMESTAMP);
|
return (Long) getHeader(JmsHeaders.TIMESTAMP);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Static factory method
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a {@link JmsMessageHeaderAccessor} from the headers of an existing message.
|
||||||
|
*/
|
||||||
|
public static JmsMessageHeaderAccessor wrap(Message<?> message) {
|
||||||
|
return new JmsMessageHeaderAccessor(message);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,15 +14,14 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.springframework.jms.support.converter;
|
package org.springframework.jms.support;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.HashSet;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import javax.jms.Destination;
|
import javax.jms.Destination;
|
||||||
import javax.jms.JMSException;
|
import javax.jms.JMSException;
|
||||||
|
|
||||||
|
@ -34,16 +33,16 @@ import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Simple implementation of {@link JmsHeaderMapper}.
|
* Simple implementation of {@link JmsHeaderMapper}.
|
||||||
* <p>
|
*
|
||||||
* This implementation copies JMS API headers (e.g. JMSReplyTo) to and from
|
* <p>This implementation copies JMS API headers (e.g. JMSReplyTo) to and from
|
||||||
* {@link org.springframework.messaging.Message Messages}. Any user-defined
|
* {@link org.springframework.messaging.Message Messages}. Any user-defined
|
||||||
* properties will also be copied from a JMS Message to a Message, and any
|
* properties will also be copied from a JMS Message to a Message, and any
|
||||||
* other headers on a Message (beyond the JMS API headers) will likewise
|
* other headers on a Message (beyond the JMS API headers) will likewise
|
||||||
* be copied to a JMS Message. Those other headers will be copied to the
|
* be copied to a JMS Message. Those other headers will be copied to the
|
||||||
* general properties of a JMS Message whereas the JMS API headers are passed
|
* general properties of a JMS Message whereas the JMS API headers are passed
|
||||||
* to the appropriate setter methods (e.g. setJMSReplyTo).
|
* to the appropriate setter methods (e.g. setJMSReplyTo).
|
||||||
* <p>
|
*
|
||||||
* Constants for the JMS API headers are defined in {@link JmsHeaders}.
|
* <p>Constants for the JMS API headers are defined in {@link JmsHeaders}.
|
||||||
* Note that most of the JMS headers are read-only: the JMSDestination,
|
* Note that most of the JMS headers are read-only: the JMSDestination,
|
||||||
* JMSDeliveryMode, JMSExpiration, JMSMessageID, JMSPriority, JMSRedelivered
|
* JMSDeliveryMode, JMSExpiration, JMSMessageID, JMSPriority, JMSRedelivered
|
||||||
* and JMSTimestamp flags are only copied <em>from</em> a JMS Message. Those
|
* and JMSTimestamp flags are only copied <em>from</em> a JMS Message. Those
|
||||||
|
@ -51,51 +50,47 @@ import org.springframework.util.StringUtils;
|
||||||
* JMS Message.
|
* JMS Message.
|
||||||
*
|
*
|
||||||
* @author Mark Fisher
|
* @author Mark Fisher
|
||||||
* @author Gary Russel
|
* @author Gary Russell
|
||||||
* @since 4.1
|
* @since 4.1
|
||||||
*/
|
*/
|
||||||
public class SimpleJmsHeaderMapper implements JmsHeaderMapper {
|
public class SimpleJmsHeaderMapper implements JmsHeaderMapper {
|
||||||
|
|
||||||
private static List<Class<?>> SUPPORTED_PROPERTY_TYPES = Arrays.asList(new Class<?>[] {
|
private static Set<Class<?>> SUPPORTED_PROPERTY_TYPES = new HashSet<Class<?>>(Arrays.asList(new Class<?>[] {
|
||||||
Boolean.class, Byte.class, Double.class, Float.class, Integer.class, Long.class, Short.class, String.class});
|
Boolean.class, Byte.class, Double.class, Float.class, Integer.class, Long.class, Short.class, String.class}));
|
||||||
|
|
||||||
|
|
||||||
private final Log logger = LogFactory.getLog(this.getClass());
|
private final Log logger = LogFactory.getLog(getClass());
|
||||||
|
|
||||||
private volatile String inboundPrefix = "";
|
private String inboundPrefix = "";
|
||||||
|
|
||||||
|
private String outboundPrefix = "";
|
||||||
|
|
||||||
private volatile String outboundPrefix = "";
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Specify a prefix to be appended to the message header name for any
|
* Specify a prefix to be appended to the message header name for any
|
||||||
* JMS property that is being mapped into the MessageHeaders. The
|
* JMS property that is being mapped into the MessageHeaders. The
|
||||||
* default is an empty string (no prefix).
|
* default is an empty string (no prefix).
|
||||||
* <p>
|
* <p>This does not affect the JMS properties covered by the specification/API,
|
||||||
* This does not affect the JMS properties covered by the specification/API,
|
|
||||||
* such as JMSCorrelationID, etc. The header names used for mapping such
|
* such as JMSCorrelationID, etc. The header names used for mapping such
|
||||||
* properties are all defined in our {@link JmsHeaders}.
|
* properties are all defined in our {@link org.springframework.jms.support.JmsHeaders}.
|
||||||
*
|
|
||||||
* @param inboundPrefix The inbound prefix.
|
|
||||||
*/
|
*/
|
||||||
public void setInboundPrefix(String inboundPrefix) {
|
public void setInboundPrefix(String inboundPrefix) {
|
||||||
this.inboundPrefix = (inboundPrefix != null) ? inboundPrefix : "";
|
this.inboundPrefix = (inboundPrefix != null ? inboundPrefix : "");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Specify a prefix to be appended to the JMS property name for any
|
* Specify a prefix to be appended to the JMS property name for any
|
||||||
* message header that is being mapped into the JMS Message. The
|
* message header that is being mapped into the JMS Message. The
|
||||||
* default is an empty string (no prefix).
|
* default is an empty string (no prefix).
|
||||||
* <p>
|
* <p>This does not affect the JMS properties covered by the specification/API,
|
||||||
* This does not affect the JMS properties covered by the specification/API,
|
|
||||||
* such as JMSCorrelationID, etc. The header names used for mapping such
|
* such as JMSCorrelationID, etc. The header names used for mapping such
|
||||||
* properties are all defined in our {@link JmsHeaders}.
|
* properties are all defined in our {@link org.springframework.jms.support.JmsHeaders}.
|
||||||
*
|
|
||||||
* @param outboundPrefix The outbound prefix.
|
|
||||||
*/
|
*/
|
||||||
public void setOutboundPrefix(String outboundPrefix) {
|
public void setOutboundPrefix(String outboundPrefix) {
|
||||||
this.outboundPrefix = (outboundPrefix != null) ? outboundPrefix : "";
|
this.outboundPrefix = (outboundPrefix != null ? outboundPrefix : "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void fromHeaders(MessageHeaders headers, javax.jms.Message jmsMessage) {
|
public void fromHeaders(MessageHeaders headers, javax.jms.Message jmsMessage) {
|
||||||
try {
|
try {
|
||||||
|
@ -152,15 +147,15 @@ public class SimpleJmsHeaderMapper implements JmsHeaderMapper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception ex) {
|
||||||
if (logger.isWarnEnabled()) {
|
if (logger.isWarnEnabled()) {
|
||||||
logger.warn("error occurred while mapping from MessageHeaders to JMS properties", e);
|
logger.warn("error occurred while mapping from MessageHeaders to JMS properties", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<String, Object> toHeaders(javax.jms.Message jmsMessage) {
|
public MessageHeaders toHeaders(javax.jms.Message jmsMessage) {
|
||||||
Map<String, Object> headers = new HashMap<String, Object>();
|
Map<String, Object> headers = new HashMap<String, Object>();
|
||||||
try {
|
try {
|
||||||
try {
|
try {
|
||||||
|
@ -169,8 +164,8 @@ public class SimpleJmsHeaderMapper implements JmsHeaderMapper {
|
||||||
headers.put(JmsHeaders.CORRELATION_ID, correlationId);
|
headers.put(JmsHeaders.CORRELATION_ID, correlationId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception ex) {
|
||||||
logger.info("failed to read JMSCorrelationID property, skipping", e);
|
logger.info("failed to read JMSCorrelationID property, skipping", ex);
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
Destination destination = jmsMessage.getJMSDestination();
|
Destination destination = jmsMessage.getJMSDestination();
|
||||||
|
@ -178,22 +173,22 @@ public class SimpleJmsHeaderMapper implements JmsHeaderMapper {
|
||||||
headers.put(JmsHeaders.DESTINATION, destination);
|
headers.put(JmsHeaders.DESTINATION, destination);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception ex) {
|
||||||
logger.info("failed to read JMSDestination property, skipping", e);
|
logger.info("failed to read JMSDestination property, skipping", ex);
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
int deliveryMode = jmsMessage.getJMSDeliveryMode();
|
int deliveryMode = jmsMessage.getJMSDeliveryMode();
|
||||||
headers.put(JmsHeaders.DELIVERY_MODE, deliveryMode);
|
headers.put(JmsHeaders.DELIVERY_MODE, deliveryMode);
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception ex) {
|
||||||
logger.info("failed to read JMSDeliveryMode property, skipping", e);
|
logger.info("failed to read JMSDeliveryMode property, skipping", ex);
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
long expiration = jmsMessage.getJMSExpiration();
|
long expiration = jmsMessage.getJMSExpiration();
|
||||||
headers.put(JmsHeaders.EXPIRATION, expiration);
|
headers.put(JmsHeaders.EXPIRATION, expiration);
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception ex) {
|
||||||
logger.info("failed to read JMSExpiration property, skipping", e);
|
logger.info("failed to read JMSExpiration property, skipping", ex);
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
String messageId = jmsMessage.getJMSMessageID();
|
String messageId = jmsMessage.getJMSMessageID();
|
||||||
|
@ -201,14 +196,14 @@ public class SimpleJmsHeaderMapper implements JmsHeaderMapper {
|
||||||
headers.put(JmsHeaders.MESSAGE_ID, messageId);
|
headers.put(JmsHeaders.MESSAGE_ID, messageId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception ex) {
|
||||||
logger.info("failed to read JMSMessageID property, skipping", e);
|
logger.info("failed to read JMSMessageID property, skipping", ex);
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
headers.put(JmsHeaders.PRIORITY, jmsMessage.getJMSPriority());
|
headers.put(JmsHeaders.PRIORITY, jmsMessage.getJMSPriority());
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception ex) {
|
||||||
logger.info("failed to read JMSPriority property, skipping", e);
|
logger.info("failed to read JMSPriority property, skipping", ex);
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
Destination replyTo = jmsMessage.getJMSReplyTo();
|
Destination replyTo = jmsMessage.getJMSReplyTo();
|
||||||
|
@ -216,14 +211,14 @@ public class SimpleJmsHeaderMapper implements JmsHeaderMapper {
|
||||||
headers.put(JmsHeaders.REPLY_TO, replyTo);
|
headers.put(JmsHeaders.REPLY_TO, replyTo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception ex) {
|
||||||
logger.info("failed to read JMSReplyTo property, skipping", e);
|
logger.info("failed to read JMSReplyTo property, skipping", ex);
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
headers.put(JmsHeaders.REDELIVERED, jmsMessage.getJMSRedelivered());
|
headers.put(JmsHeaders.REDELIVERED, jmsMessage.getJMSRedelivered());
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception ex) {
|
||||||
logger.info("failed to read JMSRedelivered property, skipping", e);
|
logger.info("failed to read JMSRedelivered property, skipping", ex);
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
String type = jmsMessage.getJMSType();
|
String type = jmsMessage.getJMSType();
|
||||||
|
@ -231,14 +226,14 @@ public class SimpleJmsHeaderMapper implements JmsHeaderMapper {
|
||||||
headers.put(JmsHeaders.TYPE, type);
|
headers.put(JmsHeaders.TYPE, type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception ex) {
|
||||||
logger.info("failed to read JMSType property, skipping", e);
|
logger.info("failed to read JMSType property, skipping", ex);
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
headers.put(JmsHeaders.TIMESTAMP, jmsMessage.getJMSTimestamp());
|
headers.put(JmsHeaders.TIMESTAMP, jmsMessage.getJMSTimestamp());
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception ex) {
|
||||||
logger.info("failed to read JMSTimestamp property, skipping", e);
|
logger.info("failed to read JMSTimestamp property, skipping", ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -250,21 +245,21 @@ public class SimpleJmsHeaderMapper implements JmsHeaderMapper {
|
||||||
String headerName = this.toHeaderName(propertyName);
|
String headerName = this.toHeaderName(propertyName);
|
||||||
headers.put(headerName, jmsMessage.getObjectProperty(propertyName));
|
headers.put(headerName, jmsMessage.getObjectProperty(propertyName));
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception ex) {
|
||||||
if (logger.isWarnEnabled()) {
|
if (logger.isWarnEnabled()) {
|
||||||
logger.warn("error occurred while mapping JMS property '"
|
logger.warn("Error occurred while mapping JMS property '" + propertyName +
|
||||||
+ propertyName + "' to Message header", e);
|
"' to Message header", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (JMSException e) {
|
catch (JMSException ex) {
|
||||||
if (logger.isWarnEnabled()) {
|
if (logger.isWarnEnabled()) {
|
||||||
logger.warn("error occurred while mapping from JMS properties to MessageHeaders", e);
|
logger.warn("Error occurred while mapping from JMS properties to MessageHeaders", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return headers;
|
return new MessageHeaders(headers);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
|
@ -17,19 +17,20 @@
|
||||||
package org.springframework.jms.support.converter;
|
package org.springframework.jms.support.converter;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import javax.jms.JMSException;
|
import javax.jms.JMSException;
|
||||||
import javax.jms.Session;
|
import javax.jms.Session;
|
||||||
|
|
||||||
import org.springframework.beans.factory.InitializingBean;
|
import org.springframework.beans.factory.InitializingBean;
|
||||||
|
import org.springframework.jms.support.JmsHeaderMapper;
|
||||||
|
import org.springframework.jms.support.SimpleJmsHeaderMapper;
|
||||||
import org.springframework.messaging.Message;
|
import org.springframework.messaging.Message;
|
||||||
import org.springframework.messaging.support.MessageBuilder;
|
import org.springframework.messaging.support.MessageBuilder;
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert a {@link Message} from the messaging abstraction to
|
* Convert a {@link Message} from the messaging abstraction to and from a
|
||||||
* and from a {@link javax.jms.Message} using an underlying
|
* {@link javax.jms.Message} using an underlying {@link MessageConverter}
|
||||||
* {@link MessageConverter} for the payload and a {@link JmsHeaderMapper}
|
* for the payload and a {@link org.springframework.jms.support.JmsHeaderMapper}
|
||||||
* to map the JMS headers to and from standard message headers.
|
* to map the JMS headers to and from standard message headers.
|
||||||
*
|
*
|
||||||
* @author Stephane Nicoll
|
* @author Stephane Nicoll
|
||||||
|
@ -41,10 +42,11 @@ public class MessagingMessageConverter implements MessageConverter, Initializing
|
||||||
|
|
||||||
private JmsHeaderMapper headerMapper;
|
private JmsHeaderMapper headerMapper;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create an instance with a default payload converter.
|
* Create an instance with a default payload converter.
|
||||||
* @see org.springframework.jms.support.converter.SimpleMessageConverter
|
* @see org.springframework.jms.support.converter.SimpleMessageConverter
|
||||||
* @see org.springframework.jms.support.converter.SimpleJmsHeaderMapper
|
* @see org.springframework.jms.support.SimpleJmsHeaderMapper
|
||||||
*/
|
*/
|
||||||
public MessagingMessageConverter() {
|
public MessagingMessageConverter() {
|
||||||
this(new SimpleMessageConverter(), new SimpleJmsHeaderMapper());
|
this(new SimpleMessageConverter(), new SimpleJmsHeaderMapper());
|
||||||
|
@ -61,6 +63,7 @@ public class MessagingMessageConverter implements MessageConverter, Initializing
|
||||||
this.headerMapper = headerMapper;
|
this.headerMapper = headerMapper;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the {@link MessageConverter} to use to convert the payload.
|
* Set the {@link MessageConverter} to use to convert the payload.
|
||||||
*/
|
*/
|
||||||
|
@ -82,13 +85,13 @@ public class MessagingMessageConverter implements MessageConverter, Initializing
|
||||||
Assert.notNull(this.headerMapper, "Property 'headerMapper' is required");
|
Assert.notNull(this.headerMapper, "Property 'headerMapper' is required");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public javax.jms.Message toMessage(Object object, Session session) throws JMSException, MessageConversionException {
|
public javax.jms.Message toMessage(Object object, Session session) throws JMSException, MessageConversionException {
|
||||||
if (!(object instanceof Message)) {
|
if (!(object instanceof Message)) {
|
||||||
throw new IllegalArgumentException("Could not convert [" + object + "] only ["
|
throw new IllegalArgumentException("Could not convert [" + object + "] - only [" +
|
||||||
+ Message.class.getName() + "] is handled by this converter");
|
Message.class.getName() + "] is handled by this converter");
|
||||||
}
|
}
|
||||||
|
|
||||||
Message<?> input = (Message<?>) object;
|
Message<?> input = (Message<?>) object;
|
||||||
javax.jms.Message reply = this.payloadConverter.toMessage(input.getPayload(), session);
|
javax.jms.Message reply = this.payloadConverter.toMessage(input.getPayload(), session);
|
||||||
this.headerMapper.fromHeaders(input.getHeaders(), reply);
|
this.headerMapper.fromHeaders(input.getHeaders(), reply);
|
||||||
|
@ -110,7 +113,7 @@ public class MessagingMessageConverter implements MessageConverter, Initializing
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extract the payload of the specified {@link javax.jms.Message}
|
* Extract the payload of the specified {@link javax.jms.Message}.
|
||||||
*/
|
*/
|
||||||
protected Object extractPayload(javax.jms.Message message) throws JMSException {
|
protected Object extractPayload(javax.jms.Message message) throws JMSException {
|
||||||
return this.payloadConverter.fromMessage(message);
|
return this.payloadConverter.fromMessage(message);
|
||||||
|
|
|
@ -50,7 +50,7 @@ import org.springframework.jms.listener.adapter.ReplyFailureException;
|
||||||
import org.springframework.jms.listener.adapter.ListenerExecutionFailedException;
|
import org.springframework.jms.listener.adapter.ListenerExecutionFailedException;
|
||||||
import org.springframework.jms.listener.adapter.MessagingMessageListenerAdapter;
|
import org.springframework.jms.listener.adapter.MessagingMessageListenerAdapter;
|
||||||
import org.springframework.jms.support.JmsMessageHeaderAccessor;
|
import org.springframework.jms.support.JmsMessageHeaderAccessor;
|
||||||
import org.springframework.jms.support.converter.JmsHeaders;
|
import org.springframework.jms.support.JmsHeaders;
|
||||||
import org.springframework.jms.support.destination.DestinationResolver;
|
import org.springframework.jms.support.destination.DestinationResolver;
|
||||||
import org.springframework.messaging.Message;
|
import org.springframework.messaging.Message;
|
||||||
import org.springframework.messaging.MessageHeaders;
|
import org.springframework.messaging.MessageHeaders;
|
||||||
|
|
|
@ -14,12 +14,11 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.springframework.jms.messaging;
|
package org.springframework.jms.core;
|
||||||
|
|
||||||
import java.io.Writer;
|
import java.io.Writer;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import javax.jms.Destination;
|
import javax.jms.Destination;
|
||||||
import javax.jms.JMSException;
|
import javax.jms.JMSException;
|
||||||
import javax.jms.Session;
|
import javax.jms.Session;
|
||||||
|
@ -36,10 +35,8 @@ import org.mockito.Mock;
|
||||||
import org.mockito.MockitoAnnotations;
|
import org.mockito.MockitoAnnotations;
|
||||||
import org.mockito.invocation.InvocationOnMock;
|
import org.mockito.invocation.InvocationOnMock;
|
||||||
import org.mockito.stubbing.Answer;
|
import org.mockito.stubbing.Answer;
|
||||||
import org.springframework.core.convert.support.DefaultConversionService;
|
|
||||||
import org.springframework.jms.StubTextMessage;
|
import org.springframework.jms.StubTextMessage;
|
||||||
import org.springframework.jms.core.JmsTemplate;
|
|
||||||
import org.springframework.jms.core.MessageCreator;
|
|
||||||
import org.springframework.jms.support.converter.MessageConversionException;
|
import org.springframework.jms.support.converter.MessageConversionException;
|
||||||
import org.springframework.jms.support.converter.SimpleMessageConverter;
|
import org.springframework.jms.support.converter.SimpleMessageConverter;
|
||||||
import org.springframework.messaging.Message;
|
import org.springframework.messaging.Message;
|
||||||
|
@ -317,7 +314,7 @@ public class JmsMessagingTemplateTests {
|
||||||
javax.jms.Message jmsMessage = createJmsTextMessage("123");
|
javax.jms.Message jmsMessage = createJmsTextMessage("123");
|
||||||
given(jmsTemplate.receive("myQueue")).willReturn(jmsMessage);
|
given(jmsTemplate.receive("myQueue")).willReturn(jmsMessage);
|
||||||
|
|
||||||
messagingTemplate.setMessageConverter(new GenericMessageConverter(new DefaultConversionService()));
|
messagingTemplate.setMessageConverter(new GenericMessageConverter());
|
||||||
|
|
||||||
Integer payload = messagingTemplate.receiveAndConvert("myQueue", Integer.class);
|
Integer payload = messagingTemplate.receiveAndConvert("myQueue", Integer.class);
|
||||||
assertEquals(Integer.valueOf(123), payload);
|
assertEquals(Integer.valueOf(123), payload);
|
|
@ -26,7 +26,6 @@ import javax.jms.JMSException;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import org.springframework.jms.StubTextMessage;
|
import org.springframework.jms.StubTextMessage;
|
||||||
import org.springframework.jms.support.converter.SimpleJmsHeaderMapper;
|
|
||||||
import org.springframework.messaging.Message;
|
import org.springframework.messaging.Message;
|
||||||
import org.springframework.messaging.support.MessageBuilder;
|
import org.springframework.messaging.support.MessageBuilder;
|
||||||
|
|
||||||
|
|
|
@ -14,13 +14,10 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.springframework.jms.support.converter;
|
package org.springframework.jms.support;
|
||||||
|
|
||||||
import static org.junit.Assert.*;
|
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import javax.jms.DeliveryMode;
|
import javax.jms.DeliveryMode;
|
||||||
import javax.jms.Destination;
|
import javax.jms.Destination;
|
||||||
import javax.jms.JMSException;
|
import javax.jms.JMSException;
|
||||||
|
@ -32,6 +29,8 @@ import org.springframework.messaging.Message;
|
||||||
import org.springframework.messaging.MessageHeaders;
|
import org.springframework.messaging.MessageHeaders;
|
||||||
import org.springframework.messaging.support.MessageBuilder;
|
import org.springframework.messaging.support.MessageBuilder;
|
||||||
|
|
||||||
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author Mark Fisher
|
* @author Mark Fisher
|
||||||
|
@ -42,6 +41,7 @@ public class SimpleJmsHeaderMapperTests {
|
||||||
|
|
||||||
private final SimpleJmsHeaderMapper mapper = new SimpleJmsHeaderMapper();
|
private final SimpleJmsHeaderMapper mapper = new SimpleJmsHeaderMapper();
|
||||||
|
|
||||||
|
|
||||||
// Outbound mapping
|
// Outbound mapping
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -559,4 +559,5 @@ public class SimpleJmsHeaderMapperTests {
|
||||||
private MessageBuilder<String> initBuilder() {
|
private MessageBuilder<String> initBuilder() {
|
||||||
return MessageBuilder.withPayload("test");
|
return MessageBuilder.withPayload("test");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,20 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2002-2014 the original author or authors.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides classes related to mapping to/from message headers.
|
|
||||||
*/
|
|
||||||
package org.springframework.messaging.mapping;
|
|
|
@ -14,9 +14,7 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.springframework.messaging.mapping;
|
package org.springframework.messaging.support;
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import org.springframework.messaging.MessageHeaders;
|
import org.springframework.messaging.MessageHeaders;
|
||||||
|
|
||||||
|
@ -26,12 +24,23 @@ import org.springframework.messaging.MessageHeaders;
|
||||||
* has a concept of headers or properties (HTTP, JMS, AMQP, etc).
|
* has a concept of headers or properties (HTTP, JMS, AMQP, etc).
|
||||||
*
|
*
|
||||||
* @author Mark Fisher
|
* @author Mark Fisher
|
||||||
* @param <T> type of the instance to and from which headers will be mapped.
|
* @since 4.1
|
||||||
|
* @param <T> type of the instance to and from which headers will be mapped
|
||||||
*/
|
*/
|
||||||
public interface HeaderMapper<T> {
|
public interface HeaderMapper<T> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Map from the given {@link MessageHeaders} to the specified target message.
|
||||||
|
* @param headers the abstracted MessageHeaders
|
||||||
|
* @param target the native target message
|
||||||
|
*/
|
||||||
void fromHeaders(MessageHeaders headers, T target);
|
void fromHeaders(MessageHeaders headers, T target);
|
||||||
|
|
||||||
Map<String, Object> toHeaders(T source);
|
/**
|
||||||
|
* Map from the given target message to abstracted {@link MessageHeaders}.
|
||||||
|
* @param source the native target message
|
||||||
|
* @return the abstracted MessageHeaders
|
||||||
|
*/
|
||||||
|
MessageHeaders toHeaders(T source);
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue