1 10 11 package org.mule.providers.http.transformers; 12 13 import java.io.IOException ; 14 import java.io.InputStream ; 15 import java.io.OutputStream ; 16 import java.io.UnsupportedEncodingException ; 17 import java.util.Iterator ; 18 19 import org.apache.commons.httpclient.ChunkedOutputStream; 20 import org.apache.commons.httpclient.Header; 21 import org.apache.commons.io.IOUtils; 22 import org.apache.commons.io.output.ByteArrayOutputStream; 23 import org.mule.providers.http.HttpConstants; 24 import org.mule.providers.http.HttpResponse; 25 import org.mule.providers.http.ResponseWriter; 26 import org.mule.transformers.AbstractTransformer; 27 import org.mule.umo.transformer.TransformerException; 28 29 36 public class HttpResponseToString extends AbstractTransformer 37 { 38 41 private static final long serialVersionUID = -6700649887307138101L; 42 43 public HttpResponseToString() 44 { 45 registerSourceType(HttpResponse.class); 46 setReturnClass(String .class); 47 } 48 49 52 protected Object doTransform(Object src, String encoding) throws TransformerException 53 { 54 try 55 { 56 HttpResponse response = (HttpResponse)src; 57 ByteArrayOutputStream bos = new ByteArrayOutputStream(8192); 58 OutputStream outstream = bos; 59 ResponseWriter writer = new ResponseWriter(outstream, encoding); 60 writer.println(response.getStatusLine()); 61 Iterator item = response.getHeaderIterator(); 62 while (item.hasNext()) 63 { 64 Header header = (Header)item.next(); 65 writer.print(header.toExternalForm()); 66 } 67 writer.println(); 68 writer.flush(); 69 70 InputStream content = response.getBody(); 71 if (content != null) 72 { 73 Header transferenc = response.getFirstHeader(HttpConstants.HEADER_TRANSFER_ENCODING); 74 if (transferenc != null) 75 { 76 response.removeHeaders(HttpConstants.HEADER_CONTENT_LENGTH); 77 if (transferenc.getValue().indexOf(HttpConstants.TRANSFER_ENCODING_CHUNKED) != -1) 78 { 79 outstream = new ChunkedOutputStream(outstream); 80 } 81 } 82 83 IOUtils.copy(content, outstream); 84 85 if (outstream instanceof ChunkedOutputStream) 86 { 87 ((ChunkedOutputStream)outstream).finish(); 88 } 89 } 90 91 outstream.flush(); 92 bos.flush(); 93 byte[] result = bos.toByteArray(); 94 outstream.close(); 95 writer.close(); 96 bos.close(); 97 98 String output = null; 99 try 100 { 101 output = new String (result, encoding); 102 } 103 catch (UnsupportedEncodingException uee) 104 { 105 output = new String (result); 109 } 110 111 return output; 112 } 113 catch (IOException e) 114 { 115 throw new TransformerException(this, e); 116 } 117 } 118 } 119 | Popular Tags |