Message filters must implement both the MessageSource and the MessageSink interface. A message filter typically implements receiveMessage by manipulating the message in some way, then sending a new message, like this:
import atg.dms.patchbay.*;
import javax.jms.*;
...
MessageSourceContext mContext;
boolean mStarted = false;
// These methods implement the MessageSource interface
public void setMessageSourceContext (MessageSourceContext pContext)
{ mContext = pContext; }
public void startMessageSource ()
{ mStarted = true; }
public void stopMessageSource ()
{ mStarted = false; }
public void receiveMessage (String pPortName, Message pMessage)
throws JMSException
{
if (pMessage instanceof TextMessage) {
String text = ((TextMessage).getText ());
String newText = text.replace ('.', '/');
TextMessage msg = mContext.createTextMessage ();
msg.setJMSType (pMessage.getJMSType ());
msg.setText (newText);
mContext.sendMessage (msg);
}
}This filter takes in TextMessages, then sends them out again with “.” replaced by “/” in the text. Notice that the mStarted flag is not consulted, since a message filter is allowed to send out messages in response to incoming messages regardless of whether it has been started or stopped.

