1 30 31 package org.apache.commons.httpclient.server; 32 33 import java.io.ByteArrayOutputStream ; 34 import java.io.IOException ; 35 import java.io.InputStream ; 36 import java.util.Iterator ; 37 38 import org.apache.commons.httpclient.ChunkedInputStream; 39 import org.apache.commons.httpclient.ContentLengthInputStream; 40 import org.apache.commons.httpclient.Header; 41 import org.apache.commons.httpclient.HeaderElement; 42 import org.apache.commons.httpclient.HeaderGroup; 43 import org.apache.commons.httpclient.NameValuePair; 44 45 50 public class SimpleRequest { 51 52 public static final String DEFAULT_CONTENT_CHARSET = "ISO-8859-1"; 53 54 private RequestLine requestLine = null; 55 private HeaderGroup headers = new HeaderGroup(); 56 private InputStream entity = null; 57 58 public SimpleRequest() { 59 super(); 60 } 61 62 public SimpleRequest( 63 final RequestLine requestLine, 64 final Header[] headers, 65 final InputStream content) throws IOException 66 { 67 super(); 68 if (requestLine == null) { 69 throw new IllegalArgumentException ("Request line may not be null"); 70 } 71 this.requestLine = requestLine; 72 if (headers != null) { 73 this.headers.setHeaders(headers); 74 } 75 if (content != null) { 76 String methodname = requestLine.getMethod(); 78 if ("POST".equalsIgnoreCase(methodname) || "PUT".equalsIgnoreCase(methodname)) { 79 Header contentLength = this.headers.getFirstHeader("Content-Length"); 80 Header transferEncoding = this.headers.getFirstHeader("Transfer-Encoding"); 81 InputStream in = content; 82 if (transferEncoding != null) { 83 if (transferEncoding.getValue().indexOf("chunked") != -1) { 84 in = new ChunkedInputStream(in); 85 } 86 } else if (contentLength != null) { 87 long len = getContentLength(); 88 if (len >= 0) { 89 in = new ContentLengthInputStream(in, len); 90 } 91 } 92 this.entity = in; 93 } 94 } 95 } 96 97 public SimpleRequest(final RequestLine requestLine, final Header[] headers) 98 throws IOException { 99 this(requestLine, headers, null); 100 } 101 102 public RequestLine getRequestLine() { 103 return this.requestLine; 104 } 105 106 public void setRequestLine(final RequestLine requestline) { 107 if (requestline == null) { 108 throw new IllegalArgumentException ("Request line may not be null"); 109 } 110 this.requestLine = requestline; 111 } 112 113 public boolean containsHeader(final String name) { 114 return this.headers.containsHeader(name); 115 } 116 117 public Header[] getHeaders() { 118 return this.headers.getAllHeaders(); 119 } 120 121 public Header getFirstHeader(final String s) { 122 return this.headers.getFirstHeader(s); 123 } 124 125 public void removeHeaders(final String s) { 126 if (s == null) { 127 return; 128 } 129 Header[] headers = this.headers.getHeaders(s); 130 for (int i = 0; i < headers.length; i++) { 131 this.headers.removeHeader(headers[i]); 132 } 133 } 134 135 public void addHeader(final Header header) { 136 if (header == null) { 137 return; 138 } 139 this.headers.addHeader(header); 140 } 141 142 public void setHeader(final Header header) { 143 if (header == null) { 144 return; 145 } 146 removeHeaders(header.getName()); 147 addHeader(header); 148 } 149 150 public Iterator getHeaderIterator() { 151 return this.headers.getIterator(); 152 } 153 154 public String getContentType() { 155 Header contenttype = this.headers.getFirstHeader("Content-Type"); 156 if (contenttype != null) { 157 return contenttype.getValue(); 158 } else { 159 return "text/plain"; 160 } 161 } 162 163 public String getCharset() { 164 String charset = null; 165 Header contenttype = this.headers.getFirstHeader("Content-Type"); 166 if (contenttype != null) { 167 HeaderElement values[] = contenttype.getElements(); 168 if (values.length == 1) { 169 NameValuePair param = values[0].getParameterByName("charset"); 170 if (param != null) { 171 charset = param.getValue(); 172 } 173 } 174 } 175 if (charset != null) { 176 return charset; 177 } else { 178 return DEFAULT_CONTENT_CHARSET; 179 } 180 } 181 182 public long getContentLength() { 183 Header contentLength = this.headers.getFirstHeader("Content-Length"); 184 if (contentLength != null) { 185 try { 186 return Long.parseLong(contentLength.getValue()); 187 } catch (NumberFormatException e) { 188 return -1; 189 } 190 } else { 191 return -1; 192 } 193 } 194 195 public InputStream getBody() { 196 return this.entity; 197 } 198 199 public byte[] getBodyBytes() throws IOException { 200 InputStream in = getBody(); 201 if (in != null) { 202 byte[] tmp = new byte[4096]; 203 int bytesRead = 0; 204 ByteArrayOutputStream buffer = new ByteArrayOutputStream (1024); 205 while ((bytesRead = in.read(tmp)) != -1) { 206 buffer.write(tmp, 0, bytesRead); 207 } 208 return buffer.toByteArray(); 209 } else { 210 return null; 211 } 212 } 213 214 public String getBodyString() throws IOException { 215 byte[] raw = getBodyBytes(); 216 if (raw != null) { 217 return new String (raw, getCharset()); 218 } else { 219 return null; 220 } 221 } 222 } 223 | Popular Tags |