/* * JBoss, Home of Professional Open Source * Copyright 2011, Red Hat, Inc. and/or its affiliates, and individual * contributors by the @authors tag. See the copyright.txt in the * distribution for a full listing of individual contributors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jboss.seam.jms.bridge; import java.util.Map; import java.util.Set; import javax.enterprise.event.Observes; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.Message; import org.jboss.solder.logging.Logger; import org.jboss.seam.jms.JmsMessage; import org.jboss.seam.jms.MessageManager; public class JmsMessageObserver { private Logger logger = Logger.getLogger(JmsMessageObserver.class); @SuppressWarnings({ "unchecked", "rawtypes" }) public void observeJmsMessages(@Observes JmsMessage jmsMessage, MessageManager messageManager) throws JMSException { Message msg = null; Class<?> payloadType = jmsMessage.getPayloadType(); if(payloadType.isAssignableFrom(String.class)) { String data = (String)jmsMessage.getPayload(); msg = messageManager.createTextMessage(data); } else if(payloadType.isAssignableFrom(Map.class)) { Map map = (Map)jmsMessage.getPayload(); msg = messageManager.createMapMessage(map); } else { msg = messageManager.createObjectMessage(jmsMessage.getPayload()); } Map<String,Object> properties = jmsMessage.getProperties(); Set<String> propKeys = properties.keySet(); for(String key : propKeys) { Object value = properties.get(key); Class<?> type = value.getClass(); if(type.isAssignableFrom(Boolean.class)){ msg.setBooleanProperty(key, (Boolean)value); } else if(type.isAssignableFrom(Byte.class)){ msg.setByteProperty(key, (Byte)value); } else if(type.isAssignableFrom(Double.class)){ msg.setDoubleProperty(key, (Double)value); } else if(type.isAssignableFrom(Float.class)){ msg.setFloatProperty(key, (Float)value); } else if(type.isAssignableFrom(Integer.class)){ msg.setIntProperty(key, (Integer)value); } else if(type.isAssignableFrom(Long.class)){ msg.setLongProperty(key, (Long)value); } else if(type.isAssignableFrom(Short.class)){ msg.setShortProperty(key, (Short)value); } else if(type.isAssignableFrom(String.class)){ msg.setStringProperty(key, (String)value); } else { msg.setObjectProperty(key, value); } } Map<String,Object> headers = jmsMessage.getHeaders(); Set<String> headerKeys = headers.keySet(); for(String key : headerKeys) { Object value = headers.get(key); if(key.equalsIgnoreCase("JMSCorrelationID")) { msg.setJMSCorrelationID(value.toString()); } else if(key.equalsIgnoreCase("JMSDeliveryMode")) { msg.setJMSDeliveryMode((Integer)value); } else if(key.equalsIgnoreCase("JMSExpiration")) { msg.setJMSExpiration((Long)value); } else if(key.equalsIgnoreCase("JMSMessageID")) { msg.setJMSMessageID(value.toString()); } else if(key.equalsIgnoreCase("JMSPriority")) { msg.setJMSPriority((Integer)value); } else if(key.equalsIgnoreCase("JMSRedelivered")) { msg.setJMSRedelivered((Boolean)value); } else if(key.equalsIgnoreCase("JMSTimestamp")) { msg.setJMSTimestamp((Long)value); } else if(key.equalsIgnoreCase("JMSType")) { msg.setJMSType(value.toString()); } else { logger.warnf("Unable to set header %s on message with value %s",key,value); } } Destination[] destinations = jmsMessage.getDestinations().toArray(new Destination[]{}); messageManager.sendMessage(msg, destinations); } }