[Httpunit-commit] CVS: httpunit/src/com/meterware/servletunit ServletUnitHttpResponse.java,1.3,1.4 S
Brought to you by:
russgold
|
From: Russell G. <rus...@us...> - 2001-07-06 17:11:07
|
Update of /cvsroot/httpunit/httpunit/src/com/meterware/servletunit
In directory usw-pr-cvs1:/tmp/cvs-serv3916/src/com/meterware/servletunit
Modified Files:
ServletUnitHttpResponse.java ServletUnitWebResponse.java
Log Message:
Release to enable access from Cactus
Index: ServletUnitHttpResponse.java
===================================================================
RCS file: /cvsroot/httpunit/httpunit/src/com/meterware/servletunit/ServletUnitHttpResponse.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ServletUnitHttpResponse.java 2000/12/13 21:56:03 1.3
+++ ServletUnitHttpResponse.java 2001/07/06 17:11:04 1.4
@@ -30,6 +30,7 @@
import javax.servlet.*;
import javax.servlet.http.*;
+import com.meterware.httpunit.HttpUnitUtils;
import com.meterware.httpunit.WebRequest;
@@ -200,14 +201,9 @@
/**
* Returns the name of the character set encoding used for
* the MIME body sent by this response.
- *
- * <p>The character encoding is either the one specified in
- * the content itself or another one the client understands.
- * If no character encoding has been assigned, it is implicitly
- * set to <i>text/plain</i>.
**/
public String getCharacterEncoding() {
- throw new RuntimeException( "getCharacterEncoding not implemented" );
+ return _encoding;
}
@@ -221,7 +217,12 @@
* {@link ServletOutputStream} object to return a response.
**/
public void setContentType( String type ) {
- _contentType = type;
+ String[] typeAndEncoding = HttpUnitUtils.parseContentTypeHeader( type );
+
+ _contentType = typeAndEncoding[0];
+ if (typeAndEncoding[1] != null) _encoding = typeAndEncoding[1];
+
+ setHeader( "Content-type", _contentType + "; charset=" + _encoding );
}
@@ -233,7 +234,12 @@
* @exception IllegalStateException if you have already called the <code>getWriter</code> method
**/
public ServletOutputStream getOutputStream() throws IOException {
- throw new RuntimeException( "getOutputStream not implemented" );
+ if (_writer != null) throw new IllegalStateException( "Tried to create output stream; writer already exists" );
+ if (_servletStream == null) {
+ _outputStream = new ByteArrayOutputStream();
+ _servletStream = new ServletUnitOutputStream( _outputStream );
+ }
+ return _servletStream;
}
@@ -262,10 +268,11 @@
* use this method
*
**/
- public PrintWriter getWriter() throws IOException {
+ public PrintWriter getWriter() throws UnsupportedEncodingException {
+ if (_servletStream != null) throw new IllegalStateException( "Tried to create writer; output stream already exists" );
if (_writer == null) {
- _stringWriter = new java.io.StringWriter();
- _writer = new PrintWriter( _stringWriter );
+ _outputStream = new ByteArrayOutputStream();
+ _writer = new PrintWriter( new OutputStreamWriter( _outputStream, getCharacterEncoding() ) );
}
return _writer;
}
@@ -386,11 +393,12 @@
/**
* Returns the contents of this response.
**/
- String getContents() {
- if (_stringWriter == null) {
- return "";
+ byte[] getContents() {
+ if (_outputStream == null) {
+ return new byte[0];
} else {
- return _stringWriter.getBuffer().toString();
+ if (_writer != null) _writer.flush();
+ return _outputStream.toByteArray();
}
}
@@ -417,9 +425,13 @@
private String _contentType = "text/plain";
+ private String _encoding = "us-ascii";
+
private PrintWriter _writer;
+
+ private ServletOutputStream _servletStream;
- private StringWriter _stringWriter;
+ private ByteArrayOutputStream _outputStream;
private int _status = SC_OK;
@@ -432,7 +444,6 @@
private void completeHeaders() {
if (_headersComplete) return;
- setHeader( "Content-Type", _contentType + "; charset=us-ascii" );
addCookieHeader();
_headersComplete = true;
}
@@ -449,4 +460,20 @@
}
setHeader( "Set-Cookie", sb.toString() );
}
+}
+
+
+
+class ServletUnitOutputStream extends ServletOutputStream {
+
+ ServletUnitOutputStream( ByteArrayOutputStream stream ) {
+ _stream = stream;
+ }
+
+
+ public void write( int aByte ) throws IOException {
+ _stream.write( aByte );
+ }
+
+ private ByteArrayOutputStream _stream;
}
Index: ServletUnitWebResponse.java
===================================================================
RCS file: /cvsroot/httpunit/httpunit/src/com/meterware/servletunit/ServletUnitWebResponse.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ServletUnitWebResponse.java 2001/06/13 16:38:20 1.4
+++ ServletUnitWebResponse.java 2001/07/06 17:11:04 1.5
@@ -55,6 +55,7 @@
ServletUnitWebResponse( String target, URL url, HttpServletResponse response ) {
super( target, url );
_response = (ServletUnitHttpResponse) response;
+ defineRawInputStream( new ByteArrayInputStream( _response.getContents() ) );
}
@@ -73,23 +74,6 @@
return _response.getHeaderField( fieldName );
}
-
- /**
- * Returns the text of the response (excluding headers) as a string. Use this method in preference to 'toString'
- * which may be used to represent internal state of this object.
- **/
- public String getText() {
- return _response.getContents();
- }
-
-
- /**
- * Returns an input stream for reading the contents of this reply.
- **/
- public InputStream getInputStream() throws IOException {
- return new ByteArrayInputStream( getText().getBytes() );
- }
-
public String toString() {
return "[ _response = " + _response + "]";
|