Class MarshallingMessageConverter

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

public class MarshallingMessageConverter extends Object implements MessageConverter, org.springframework.beans.factory.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
  • Constructor Summary

    Constructors
    Constructor
    Description
    Construct a new MarshallingMessageConverter with no Marshaller or Unmarshaller set.
    MarshallingMessageConverter(org.springframework.oxm.Marshaller marshaller)
    Construct a new MarshallingMessageConverter with the given Marshaller set.
    MarshallingMessageConverter(org.springframework.oxm.Marshaller marshaller, org.springframework.oxm.Unmarshaller unmarshaller)
    Construct a new MarshallingMessageConverter with the given Marshaller and Unmarshaller.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
     
    fromMessage(jakarta.jms.Message message)
    This implementation unmarshals the given Message into an object.
    protected jakarta.jms.BytesMessage
    marshalToBytesMessage(Object object, jakarta.jms.Session session, org.springframework.oxm.Marshaller marshaller)
    Marshal the given object to a BytesMessage.
    protected jakarta.jms.Message
    marshalToMessage(Object object, jakarta.jms.Session session, org.springframework.oxm.Marshaller marshaller, MessageType targetType)
    Template method that allows for custom message marshalling.
    protected jakarta.jms.TextMessage
    marshalToTextMessage(Object object, jakarta.jms.Session session, org.springframework.oxm.Marshaller marshaller)
    Marshal the given object to a TextMessage.
    void
    setMarshaller(org.springframework.oxm.Marshaller marshaller)
    Set the Marshaller to be used by this message converter.
    void
    Specify whether toMessage(Object, Session) should marshal to a BytesMessage or a TextMessage.
    void
    setUnmarshaller(org.springframework.oxm.Unmarshaller unmarshaller)
    Set the Unmarshaller to be used by this message converter.
    jakarta.jms.Message
    toMessage(Object object, jakarta.jms.Session session)
    This implementation marshals the given object to a TextMessage or BytesMessage.
    protected Object
    unmarshalFromBytesMessage(jakarta.jms.BytesMessage message, org.springframework.oxm.Unmarshaller unmarshaller)
    Unmarshal the given BytesMessage into an object.
    protected Object
    unmarshalFromMessage(jakarta.jms.Message message, org.springframework.oxm.Unmarshaller unmarshaller)
    Template method that allows for custom message unmarshalling.
    protected Object
    unmarshalFromTextMessage(jakarta.jms.TextMessage message, org.springframework.oxm.Unmarshaller unmarshaller)
    Unmarshal the given TextMessage into an object.

    Methods inherited from class Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • 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(org.springframework.oxm.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(org.springframework.oxm.Marshaller marshaller, org.springframework.oxm.Unmarshaller unmarshaller)
      Construct a new MarshallingMessageConverter with the given Marshaller and Unmarshaller.
      Parameters:
      marshaller - the Marshaller to use
      unmarshaller - the Unmarshaller to use
  • Method Details

    • setMarshaller

      public void setMarshaller(org.springframework.oxm.Marshaller marshaller)
      Set the Marshaller to be used by this message converter.
    • setUnmarshaller

      public void setUnmarshaller(org.springframework.oxm.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:
    • afterPropertiesSet

      public void afterPropertiesSet()
      Specified by:
      afterPropertiesSet in interface org.springframework.beans.factory.InitializingBean
    • toMessage

      public jakarta.jms.Message toMessage(Object object, jakarta.jms.Session session) throws jakarta.jms.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:
      jakarta.jms.JMSException - if thrown by JMS API methods
      MessageConversionException - in case of conversion failure
      See Also:
    • fromMessage

      public Object fromMessage(jakarta.jms.Message message) throws jakarta.jms.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:
      jakarta.jms.JMSException - if thrown by JMS API methods
      MessageConversionException - in case of conversion failure
      See Also:
    • marshalToTextMessage

      protected jakarta.jms.TextMessage marshalToTextMessage(Object object, jakarta.jms.Session session, org.springframework.oxm.Marshaller marshaller) throws jakarta.jms.JMSException, IOException, org.springframework.oxm.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:
      jakarta.jms.JMSException - if thrown by JMS methods
      IOException - in case of I/O errors
      org.springframework.oxm.XmlMappingException - in case of OXM mapping errors
      See Also:
      • Session.createTextMessage()
      • Marshaller.marshal(Object, Result)
    • marshalToBytesMessage

      protected jakarta.jms.BytesMessage marshalToBytesMessage(Object object, jakarta.jms.Session session, org.springframework.oxm.Marshaller marshaller) throws jakarta.jms.JMSException, IOException, org.springframework.oxm.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:
      jakarta.jms.JMSException - if thrown by JMS methods
      IOException - in case of I/O errors
      org.springframework.oxm.XmlMappingException - in case of OXM mapping errors
      See Also:
      • Session.createBytesMessage()
      • Marshaller.marshal(Object, Result)
    • marshalToMessage

      protected jakarta.jms.Message marshalToMessage(Object object, jakarta.jms.Session session, org.springframework.oxm.Marshaller marshaller, MessageType targetType) throws jakarta.jms.JMSException, IOException, org.springframework.oxm.XmlMappingException
      Template method that allows for custom message marshalling. Invoked when setTargetType(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:
      jakarta.jms.JMSException - if thrown by JMS methods
      IOException - in case of I/O errors
      org.springframework.oxm.XmlMappingException - in case of OXM mapping errors
    • unmarshalFromTextMessage

      protected Object unmarshalFromTextMessage(jakarta.jms.TextMessage message, org.springframework.oxm.Unmarshaller unmarshaller) throws jakarta.jms.JMSException, IOException, org.springframework.oxm.XmlMappingException
      Unmarshal the given TextMessage into an object.
      Parameters:
      message - the message
      unmarshaller - the unmarshaller to use
      Returns:
      the unmarshalled object
      Throws:
      jakarta.jms.JMSException - if thrown by JMS methods
      IOException - in case of I/O errors
      org.springframework.oxm.XmlMappingException - in case of OXM mapping errors
      See Also:
      • Unmarshaller.unmarshal(Source)
    • unmarshalFromBytesMessage

      protected Object unmarshalFromBytesMessage(jakarta.jms.BytesMessage message, org.springframework.oxm.Unmarshaller unmarshaller) throws jakarta.jms.JMSException, IOException, org.springframework.oxm.XmlMappingException
      Unmarshal the given BytesMessage into an object.
      Parameters:
      message - the message
      unmarshaller - the unmarshaller to use
      Returns:
      the unmarshalled object
      Throws:
      jakarta.jms.JMSException - if thrown by JMS methods
      IOException - in case of I/O errors
      org.springframework.oxm.XmlMappingException - in case of OXM mapping errors
      See Also:
      • Unmarshaller.unmarshal(Source)
    • unmarshalFromMessage

      protected Object unmarshalFromMessage(jakarta.jms.Message message, org.springframework.oxm.Unmarshaller unmarshaller) throws jakarta.jms.JMSException, IOException, org.springframework.oxm.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:
      jakarta.jms.JMSException - if thrown by JMS methods
      IOException - in case of I/O errors
      org.springframework.oxm.XmlMappingException - in case of OXM mapping errors