001 /*
002 * Copyright (C) The Apache Software Foundation. All rights reserved.
003 *
004 * This software is published under the terms of the Apache Software License
005 * version 1.1, a copy of which has been included with this distribution in
006 * the LICENSE file.
007 *
008 * $Id: MessageletRequestImpl.java 155459 2005-02-26 13:24:44Z dirkv $
009 */
010 package org.apache.commons.messagelet.impl;
011
012 import java.io.BufferedReader;
013 import java.io.InputStreamReader;
014
015 import javax.jms.JMSException;
016 import javax.jms.Message;
017 import javax.jms.TextMessage;
018 import javax.servlet.ServletInputStream;
019 import javax.servlet.ServletRequest;
020 import javax.servlet.ServletRequestWrapper;
021
022 import org.apache.commons.messagelet.MessageletRequest;
023 import org.apache.commons.messenger.Messenger;
024
025 /** <p><code>MessageletRequestImpl</code> represents a servlet request from
026 * a JMS Message source.</p>
027 *
028 * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
029 * @version $Revision: 155459 $
030 */
031 public class MessageletRequestImpl extends ServletRequestWrapper implements MessageletRequest {
032
033 /** The Message which caused this request */
034 private Message message;
035 /** The stream to read the body of the current Message */
036 private ServletInputStream stream;
037
038 public MessageletRequestImpl(ServletRequest request) {
039 super(request);
040 }
041
042 public void setMessage(Message message) throws JMSException {
043 this.message = message;
044 this.stream = createInputStream();
045
046 // also publish the message as a request scope attribute
047 setAttribute( "message", message );
048 }
049
050 public void setMessenger(Messenger messenger) {
051 setAttribute( "messenger", messenger );
052 }
053
054 // MessageletRequest methods
055 //-------------------------------------------------------------------------
056
057 /** @return the Message which originated this request */
058 public Message getMessage() {
059 return message;
060 }
061
062
063 // ServletRequest methods
064 //-------------------------------------------------------------------------
065
066 public ServletInputStream getInputStream() {
067 return stream;
068 }
069
070 public BufferedReader getReader() {
071 return new BufferedReader( new InputStreamReader( stream ) );
072 }
073
074 // Implementation methods
075 //-------------------------------------------------------------------------
076
077
078 protected ServletInputStream createInputStream() throws JMSException {
079 if ( message instanceof TextMessage ) {
080 TextMessage textMessage = (TextMessage) message;
081 return new BufferedServletInputStream( textMessage.getText() );
082 }
083
084 // ##### handle ByteMessage and StreamMessage somehow one day?
085 return new BufferedServletInputStream();
086 }
087
088 }
089