## org.springframework.jms.support.converter
Class MarshallingMessageConverter

    java.lang.Object
      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 `marshalTo` 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 implemenetation 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