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: HttpMessageletRequestImpl.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.http.HttpServletRequest; 020 import javax.servlet.http.HttpServletRequestWrapper; 021 022 import org.apache.commons.messagelet.MessageletRequest; 023 import org.apache.commons.messenger.Messenger; 024 025 /** <p><code>HttpMessageletRequestImpl</code> represents a servlet request from 026 * a JMS Message source which appears to be a HTTP request so that JSP can process 027 * the request as if it were a HTTP request.</p> 028 * 029 * @author <a href="mailto:jstrachan@apache.org">James Strachan</a> 030 * @version $Revision: 155459 $ 031 */ 032 public class HttpMessageletRequestImpl extends HttpServletRequestWrapper implements MessageletRequest { 033 034 /** The Message which caused this request */ 035 private Message message; 036 /** The stream to read the body of the current Message */ 037 private ServletInputStream stream; 038 039 public HttpMessageletRequestImpl(HttpServletRequest request) { 040 super(request); 041 } 042 043 public void setMessage(Message message) throws JMSException { 044 this.message = message; 045 this.stream = createInputStream(); 046 047 // also publish the message as a request scope attribute 048 setAttribute( "message", message ); 049 } 050 051 public void setMessenger(Messenger messenger) { 052 setAttribute( "messenger", messenger ); 053 } 054 055 // MessageletRequest methods 056 //------------------------------------------------------------------------- 057 058 /** @return the Message which originated this request */ 059 public Message getMessage() { 060 return message; 061 } 062 063 064 // ServletRequest methods 065 //------------------------------------------------------------------------- 066 067 public ServletInputStream getInputStream() { 068 return stream; 069 } 070 071 public BufferedReader getReader() { 072 return new BufferedReader( new InputStreamReader( stream ) ); 073 } 074 075 076 077 // Implementation methods 078 //------------------------------------------------------------------------- 079 080 protected ServletInputStream createInputStream() throws JMSException { 081 if ( message instanceof TextMessage ) { 082 TextMessage textMessage = (TextMessage) message; 083 return new BufferedServletInputStream( textMessage.getText() ); 084 } 085 086 // ##### handle ByteMessage and StreamMessage somehow one day? 087 return new BufferedServletInputStream(); 088 } 089 090 } 091