# Class MessageTransformer<T,S>

java.lang.Object
com.sun.messaging.bridge.api.MessageTransformer<T,S>

public abstract class MessageTransformer<T,S> extends Object
The message transformer class to be extended by user. Its implementation must provide a public zero-argument constructor. The following is an example usage of this class for MQ STOMP bridge

    import java.util.*;
    import jakarta.jms.*;
    import com.sun.messaging.bridge.api.MessageTransformer;

    public class MessageTran extends MessageTransformer <Message, Message> {

    public Message transform(Message message,
                             boolean readOnly,
                             String charsetName,
                             String source,
                             String target,
                             Properties properties)
                             throws Exception {

       Message m = message;
       if (source.equals(STOMP)) { //from STOMP client to Java Message Queue
           //convert any invalid headers from STOMP SEND frame
           if (properties != null) {
               ......
               //convert key to valid JMS message property name, then call m.setStringProperty()
               ......
           }

       } else if (source.equals(SUN_MQ)) { //from Java Message Queue to STOMP client

           if (message instanceof ObjectMessage) {

               //create a new BytesMessage for message to be transformed to
               BytesMessage bm = (BytesMessage)createJMSMessage(JMSMessageType.BYTESMESSAGE);

               //convert message to the BytesMessage
               ......
               m = bm;
           } else {
               ....
           }
       }
       return m;
    }

Author:
  amyk

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Class
  Description
  `static enum`
  `MessageTransformer.JMSMessageType`

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final String`
  `STOMP`
  The predefined provider name for JMS message to/from STOMP client
  `static final String`
  `SUN_MQ`
  The predefined provider name for JMS message to/from Sun Java Message Queue

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `MessageTransformer()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `protected final void`
  `branchTo(Object d)`
  To be called from the transform() method when needs to tell the bridge to branch the message that is to be returned by the transform() call to a different destination in the target provider
  `protected final jakarta.jms.Message`
  `createJMSMessage(MessageTransformer.JMSMessageType type)`
  Create a JMS message object.
  `protected final jakarta.jms.Queue`
  `createQueue(String queueName)`
  To be called from the transform() method when needs to create a JMS Queue object to the target provider
  `protected final jakarta.jms.Topic`
  `createTopic(String topicName)`
  To be called from the transform() method when needs to create a JMS Topic object to the target provider
  `final Object`
  `getBranchTo()`
  This method is called by the bridge service after transform() is returned for bridge types that support branchTo()
  `final void`
  `init(Object obj, String bridgeType)`
  This method is called by the bridge service before transform() is called.
  `final boolean`
  `isNoTransfer()`
  This method is called by the bridge service after transform() is returned for bridge types that support noTransfer()
  `protected final void`
  `noTransfer()`
  To be called from the transform() method when needs to tell the bridge to consume from source and not transfer to target the message that is to be returned by the transform() call
  `abstract T`
  `transform(S message, boolean readOnly, String charsetName, String source, String target, Properties properties)`
  To be implemented by user

  ### Methods inherited from class Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Field Details

  - ### SUN_MQ

    public static final String SUN_MQ
    The predefined provider name for JMS message to/from Sun Java Message Queue
    See Also:
      - Constant Field Values

  - ### STOMP

    public static final String STOMP
    The predefined provider name for JMS message to/from STOMP client
    See Also:
      - Constant Field Values

- ## Constructor Details

  - ### MessageTransformer

    public MessageTransformer()

- ## Method Details

  - ### init

    public final void init(Object obj, String bridgeType)
    This method is called by the bridge service before transform() is called. A message transformer object is initialized by init() each time before transform() is called. After transform() returns, it's back to uninitialized state.

  - ### getBranchTo

    public final Object getBranchTo()
    This method is called by the bridge service after transform() is returned for bridge types that support branchTo()

  - ### isNoTransfer

    public final boolean isNoTransfer()
    This method is called by the bridge service after transform() is returned for bridge types that support noTransfer()

  - ### createJMSMessage

    protected final jakarta.jms.Message createJMSMessage(MessageTransformer.JMSMessageType type) throws Exception
    Create a JMS message object. This method is to be used in tranform() method implemenation when it needs to create a new JMS message
    Parameters:
      `type` - the type of the JMS message to be created
    Returns:
      a newly created uninitialized JMS message object
    Throws:
      `IllegalStateException` - if this MessageTransfomer object is not initialized
      `Exception` - if fails to create the JMS Message

  - ### createQueue

    protected final jakarta.jms.Queue createQueue(String queueName) throws Exception
    To be called from the transform() method when needs to create a JMS Queue object to the target provider
    Parameters:
      `queueName` - the name of the Queue
    Returns:
      a jakarta.jms.Queue object
    Throws:
      `IllegalStateException` - if this MessageTransfomer object is not initialized
      `Exception` - if fails to create the Queue object

  - ### createTopic

    protected final jakarta.jms.Topic createTopic(String topicName) throws Exception
    To be called from the transform() method when needs to create a JMS Topic object to the target provider
    Parameters:
      `topicName` - the name of the Topic
    Returns:
      a jakarta.jms.Topic object
    Throws:
      `IllegalStateException` - if this MessageTransfomer object is not initialized
      `Exception` - if fails to create the Topic object

  - ### branchTo

    protected final void branchTo(Object d) throws Exception
    To be called from the transform() method when needs to tell the bridge to branch the message that is to be returned by the transform() call to a different destination in the target provider
    Parameters:
      `d` - a java.lang.String or jakarta.jms.Destination object that specifies the destination in target provider to branch the message to
    Throws:
      `IllegalStateException` - if this MessageTransfomer object is not initialized
      `IllegalArgumentException` - if null or unexpected object type passed in
      `UnsupportedOperationException` - if the operation is not supported for the bridge type
      `Exception` - if fails to create the JMS Message

  - ### noTransfer

    protected final void noTransfer() throws Exception
    To be called from the transform() method when needs to tell the bridge to consume from source and not transfer to target the message that is to be returned by the transform() call
    Throws:
      `IllegalStateException` - if this MessageTransfomer object is not initialized
      `UnsupportedOperationException` - if the operation is not supported for the bridge type
      `Exception`

  - ### transform

    public abstract T transform(S message, boolean readOnly, String charsetName, String source, String target, Properties properties) throws Exception
    To be implemented by user
    Parameters:
      `message` - the message object to be tranformed.
      `readOnly` - if the message is in read-only mode
      `charsetName` - the charset name for message if applicable, null if not available
      `source` - the source provider name
      `target` - the target provider name
      `properties` - any properties for the transform() call, null if none
    Returns:
      a message object that is transformed from the passed in message
    Throws:
      `Exception` - if unable to transform message