1 22 package org.objectweb.petals.binding.jms.incoming; 23 24 import java.util.Enumeration ; 25 import java.util.logging.Level ; 26 import java.util.logging.Logger ; 27 28 import javax.jbi.messaging.InOnly; 29 import javax.jbi.messaging.MessageExchange; 30 import javax.jbi.messaging.MessageExchangeFactory; 31 import javax.jbi.messaging.MessagingException; 32 import javax.jbi.messaging.NormalizedMessage; 33 import javax.jms.JMSException ; 34 import javax.jms.Message ; 35 import javax.jms.MessageListener ; 36 import javax.jms.TextMessage ; 37 import javax.xml.namespace.QName ; 38 import javax.xml.transform.Source ; 39 40 import org.objectweb.petals.binding.jms.JmsBC; 41 import org.objectweb.petals.component.common.PEtALSComponentSDKException; 42 import org.objectweb.petals.component.common.util.SourceHelper; 43 44 51 public class JMSMessageListener implements MessageListener { 52 53 public static final String PROPERTY_OPERATION = "javax.jbi.messaging.operation"; 54 55 protected JmsBC jmsBC; 56 57 protected String address; 58 59 protected Logger l; 60 61 protected MessageExchangeFactory exchangeFactory; 62 63 public JMSMessageListener(JmsBC jmsBC, String address) { 64 this.jmsBC=jmsBC; 65 this.address = address; 66 l=jmsBC.getLogger(); 67 } 68 69 public void onMessage(Message jmsExchange) { 70 l.log(Level.FINE, "onMessage"); 71 l.log(Level.INFO, "A JMS message is received from '" 72 + address+ "'."); 73 74 try { 75 TextMessage textMessage; 77 textMessage = (TextMessage ) jmsExchange; 78 79 InOnly exchange = createInOnly(); 81 82 transform(textMessage, exchange); 84 85 jmsBC.sendMessage(address, exchange); 87 88 l.log(Level.INFO, "the message has been sent."); 89 90 } catch (ClassCastException e) { 91 l 92 .log( 93 Level.SEVERE, 94 "Only TextMessage are processed by petals-binding-jms component.", 95 e); 96 } catch (Exception e) { 97 l.log(Level.SEVERE, e.getClass() + " " + e.getMessage(), e); 98 } 99 } 100 101 106 protected InOnly createInOnly() throws MessagingException { 107 MessageExchangeFactory factory = getMessageExchangeFactory(); 108 InOnly exchange = factory.createInOnlyExchange(); 109 NormalizedMessage nm = exchange.createMessage(); 110 exchange.setInMessage(nm); 111 return exchange; 112 } 113 114 115 116 121 protected MessageExchangeFactory getMessageExchangeFactory() { 122 if (exchangeFactory == null) { 123 exchangeFactory = jmsBC.getChannel().createExchangeFactory(); 124 } 125 return exchangeFactory; 126 } 127 128 138 protected void transform(TextMessage jms, MessageExchange jbi) 139 throws JMSException , MessagingException,PEtALSComponentSDKException { 140 l.log(Level.FINE, "transform"); 141 142 String content = jms.getText(); 144 Source source = SourceHelper.createSource(content); 145 146 jbi.getMessage("in").setContent(source); 147 148 String operation = jms.getStringProperty(PROPERTY_OPERATION); 150 if (operation != null){ 151 jbi.setOperation(new QName (operation)); 152 } 153 154 for (Enumeration it = jms.getPropertyNames(); it.hasMoreElements();) { 156 String pName = (String ) it.nextElement(); 157 jbi.setProperty(pName, jms.getObjectProperty(pName)); 158 } 159 } 160 } 161 | Popular Tags |