001    /*
002     @license.text@ 
003     */
004    package biz.hammurapi.jms.adapter.converters;
005    
006    import java.io.Serializable;
007    import java.util.Map;
008    
009    import javax.jms.Message;
010    import javax.jms.ObjectMessage;
011    import javax.jms.Session;
012    
013    import biz.hammurapi.jms.adapter.Converter;
014    
015    /**
016     * Reads and writes objects from/to ObjectMessage.
017     * @author Tatyana Konukova
018     *
019     */
020    public abstract class ObjectMessageConverter implements Converter {
021    
022    
023            /**
024             * Reads object from ObjectMessage. If is-error boolean property is true then 
025             * return object gets cast to Exception and thrown.
026             */
027            public Object convert(Message message, Map properties) throws Exception {
028                    Serializable ret = ((ObjectMessage) message).getObject();
029                    if (message.getBooleanProperty("is-error")) {
030                            throw (Exception) ret;
031                    }
032                    return ret;
033            }
034    
035            /**
036             * Writes Object to ObjectMessage. Object shall be serializable.
037             * Correlates by message ID.
038             */
039            public Message convert(Object obj, Session session, Map properties, Message request) throws Exception {
040                    ObjectMessage ret = session.createObjectMessage();
041                    ret.setObject((Serializable) obj);
042                    if (request!=null) {
043                            ret.setJMSCorrelationID(request.getJMSMessageID());
044                    }
045                    return ret;
046            }
047    
048            /**
049             * Writes Exception to ObjectMessage. Exception shall be serializable.
050             * Boolean property is-error is set to true to indicate that payload is exception.
051             * Correlates by message ID.
052             */
053            public Message convert(Exception ex, Session session, Map properties, Message request) throws Exception {
054                    ObjectMessage ret = session.createObjectMessage();
055                    ret.setObject((Serializable) ex);
056                    ret.setBooleanProperty("is-error", true);
057                    if (request!=null) {
058                            ret.setJMSCorrelationID(request.getJMSMessageID());
059                    }
060                    return ret;
061            }
062    
063    }