org.springframework.jms.support.converter
Class MarshallingMessageConverter

java.lang.Object
  extended by org.springframework.jms.support.converter.MarshallingMessageConverter
All Implemented Interfaces:
InitializingBean, MessageConverter

public class MarshallingMessageConverter
extends Object
implements MessageConverter, InitializingBean

Spring JMS MessageConverter that uses a Marshaller and Unmarshaller. Marshals an object to a BytesMessage, or to a TextMessage if the targetType is set to MessageType.TEXT. Unmarshals from a TextMessage or BytesMessage to an object.

Since:
3.0
Author:
Arjen Poutsma, Juergen Hoeller
See Also:
JmsTemplate.convertAndSend(java.lang.Object), JmsTemplate.receiveAndConvert()

Constructor Summary
MarshallingMessageConverter()
          Construct a new MarshallingMessageConverter with no Marshaller or Unmarshaller set.
MarshallingMessageConverter(Marshaller marshaller)
          Construct a new MarshallingMessageConverter with the given Marshaller set.
MarshallingMessageConverter(Marshaller marshaller, Unmarshaller unmarshaller)
          Construct a new MarshallingMessageConverter with the given Marshaller and Unmarshaller.
 
Method Summary
 void afterPropertiesSet()
          Invoked by a BeanFactory after it has set all bean properties supplied (and satisfied BeanFactoryAware and ApplicationContextAware).
 Object fromMessage(Message message)
          This implementation unmarshals the given Message into an object.
protected  BytesMessage marshalToBytesMessage(Object object, Session session, Marshaller marshaller)
          Marshal the given object to a BytesMessage.
protected  Message marshalToMessage(Object object, Session session, Marshaller marshaller, MessageType targetType)
          Template method that allows for custom message marshalling.
protected  TextMessage marshalToTextMessage(Object object, Session session, Marshaller marshaller)
          Marshal the given object to a TextMessage.
 void setMarshaller(Marshaller marshaller)
          Set the Marshaller to be used by this message converter.
 void setTargetType(MessageType targetType)
          Specify whether toMessage(Object, Session) should marshal to a BytesMessage or a TextMessage.
 void setUnmarshaller(Unmarshaller unmarshaller)
          Set the Unmarshaller to be used by this message converter.
 Message toMessage(Object object, Session session)
          This implementation marshals the given object to a TextMessage or BytesMessage.
protected  Object unmarshalFromBytesMessage(BytesMessage message, Unmarshaller unmarshaller)
          Unmarshal the given BytesMessage into an object.
protected  Object unmarshalFromMessage(Message message, Unmarshaller unmarshaller)
          Template method that allows for custom message unmarshalling.
protected  Object unmarshalFromTextMessage(TextMessage message, Unmarshaller unmarshaller)
          Unmarshal the given TextMessage into an object.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

MarshallingMessageConverter

public MarshallingMessageConverter()
Construct a new MarshallingMessageConverter with no Marshaller or Unmarshaller set. The marshaller must be set after construction by invoking setMarshaller(Marshaller) and setUnmarshaller(Unmarshaller) .


MarshallingMessageConverter

public MarshallingMessageConverter(Marshaller marshaller)
Construct a new MarshallingMessageConverter with the given Marshaller set.

If the given Marshaller also implements the Unmarshaller interface, it is used for both marshalling and unmarshalling. Otherwise, an exception is thrown.

Note that all Marshaller implementations in Spring also implement the Unmarshaller interface, so that you can safely use this constructor.

Parameters:
marshaller - object used as marshaller and unmarshaller
Throws:
IllegalArgumentException - when marshaller does not implement the Unmarshaller interface as well

MarshallingMessageConverter

public MarshallingMessageConverter(Marshaller marshaller,
                                   Unmarshaller unmarshaller)
Construct a new MarshallingMessageConverter with the given Marshaller and Unmarshaller.

Parameters:
marshaller - the Marshaller to use
unmarshaller - the Unmarshaller to use
Method Detail

setMarshaller

public void setMarshaller(Marshaller marshaller)
Set the Marshaller to be used by this message converter.


setUnmarshaller

public void setUnmarshaller(Unmarshaller unmarshaller)
Set the Unmarshaller to be used by this message converter.


setTargetType

public void setTargetType(MessageType targetType)
Specify whether toMessage(Object, Session) should marshal to a BytesMessage or a TextMessage.

The default is MessageType.BYTES, i.e. this converter marshals to a BytesMessage. Note that the default version of this converter supports MessageType.BYTES and MessageType.TEXT only.

See Also:
MessageType.BYTES, MessageType.TEXT

afterPropertiesSet

public void afterPropertiesSet()
Description copied from interface: InitializingBean
Invoked by a BeanFactory after it has set all bean properties supplied (and satisfied BeanFactoryAware and ApplicationContextAware).

This method allows the bean instance to perform initialization only possible when all bean properties have been set and to throw an exception in the event of misconfiguration.

Specified by:
afterPropertiesSet in interface InitializingBean

toMessage

public Message toMessage(Object object,
                         Session session)
                  throws JMSException,
                         MessageConversionException
This implementation marshals the given object to a TextMessage or BytesMessage. The desired message type can be defined by setting the "marshalTo" property.

Specified by:
toMessage in interface MessageConverter
Parameters:
object - the object to convert
session - the Session to use for creating a JMS Message
Returns:
the JMS Message
Throws:
JMSException - if thrown by JMS API methods
MessageConversionException - in case of conversion failure
See Also:
marshalToTextMessage(java.lang.Object, javax.jms.Session, org.springframework.oxm.Marshaller), marshalToBytesMessage(java.lang.Object, javax.jms.Session, org.springframework.oxm.Marshaller)

fromMessage

public Object fromMessage(Message message)
                   throws JMSException,
                          MessageConversionException
This implementation unmarshals the given Message into an object.

Specified by:
fromMessage in interface MessageConverter
Parameters:
message - the message to convert
Returns:
the converted Java object
Throws:
JMSException - if thrown by JMS API methods
MessageConversionException - in case of conversion failure
See Also:
unmarshalFromTextMessage(javax.jms.TextMessage, org.springframework.oxm.Unmarshaller), unmarshalFromBytesMessage(javax.jms.BytesMessage, org.springframework.oxm.Unmarshaller)

marshalToTextMessage

protected TextMessage marshalToTextMessage(Object object,
                                           Session session,
                                           Marshaller marshaller)
                                    throws JMSException,
                                           IOException,
                                           XmlMappingException
Marshal the given object to a TextMessage.

Parameters:
object - the object to be marshalled
session - current JMS session
marshaller - the marshaller to use
Returns:
the resulting message
Throws:
JMSException - if thrown by JMS methods
IOException - in case of I/O errors
XmlMappingException - in case of OXM mapping errors
See Also:
Session.createTextMessage(), Marshaller.marshal(Object, Result)

marshalToBytesMessage

protected BytesMessage marshalToBytesMessage(Object object,
                                             Session session,
                                             Marshaller marshaller)
                                      throws JMSException,
                                             IOException,
                                             XmlMappingException
Marshal the given object to a BytesMessage.

Parameters:
object - the object to be marshalled
session - current JMS session
marshaller - the marshaller to use
Returns:
the resulting message
Throws:
JMSException - if thrown by JMS methods
IOException - in case of I/O errors
XmlMappingException - in case of OXM mapping errors
See Also:
Session.createBytesMessage(), Marshaller.marshal(Object, Result)

marshalToMessage

protected Message marshalToMessage(Object object,
                                   Session session,
                                   Marshaller marshaller,
                                   MessageType targetType)
                            throws JMSException,
                                   IOException,
                                   XmlMappingException
Template method that allows for custom message marshalling. Invoked when setTargetType(org.springframework.jms.support.converter.MessageType) is not MessageType.TEXT or MessageType.BYTES.

The default implementation throws an IllegalArgumentException.

Parameters:
object - the object to marshal
session - the JMS session
marshaller - the marshaller to use
targetType - the target message type (other than TEXT or BYTES)
Returns:
the resulting message
Throws:
JMSException - if thrown by JMS methods
IOException - in case of I/O errors
XmlMappingException - in case of OXM mapping errors

unmarshalFromTextMessage

protected Object unmarshalFromTextMessage(TextMessage message,
                                          Unmarshaller unmarshaller)
                                   throws JMSException,
                                          IOException,
                                          XmlMappingException
Unmarshal the given TextMessage into an object.

Parameters:
message - the message
unmarshaller - the unmarshaller to use
Returns:
the unmarshalled object
Throws:
JMSException - if thrown by JMS methods
IOException - in case of I/O errors
XmlMappingException - in case of OXM mapping errors
See Also:
Unmarshaller.unmarshal(Source)

unmarshalFromBytesMessage

protected Object unmarshalFromBytesMessage(BytesMessage message,
                                           Unmarshaller unmarshaller)
                                    throws JMSException,
                                           IOException,
                                           XmlMappingException
Unmarshal the given BytesMessage into an object.

Parameters:
message - the message
unmarshaller - the unmarshaller to use
Returns:
the unmarshalled object
Throws:
JMSException - if thrown by JMS methods
IOException - in case of I/O errors
XmlMappingException - in case of OXM mapping errors
See Also:
Unmarshaller.unmarshal(Source)

unmarshalFromMessage

protected Object unmarshalFromMessage(Message message,
                                      Unmarshaller unmarshaller)
                               throws JMSException,
                                      IOException,
                                      XmlMappingException
Template method that allows for custom message unmarshalling. Invoked when fromMessage(Message) is invoked with a message that is not a TextMessage or BytesMessage.

The default implementation throws an IllegalArgumentException.

Parameters:
message - the message
unmarshaller - the unmarshaller to use
Returns:
the unmarshalled object
Throws:
JMSException - if thrown by JMS methods
IOException - in case of I/O errors
XmlMappingException - in case of OXM mapping errors