View Javadoc

1   /*
2    * $Id: HttpClientMethodResponseToObject.java 10489 2008-01-23 17:53:38Z dfeist $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
9    */
10  
11  package org.mule.transport.http.transformers;
12  
13  import org.mule.DefaultMuleMessage;
14  import org.mule.api.MuleMessage;
15  import org.mule.api.transformer.TransformerException;
16  import org.mule.transformer.AbstractTransformer;
17  import org.mule.transport.NullPayload;
18  import org.mule.transport.http.HttpConstants;
19  import org.mule.transport.http.ReleasingInputStream;
20  
21  import java.io.IOException;
22  import java.io.InputStream;
23  import java.util.HashMap;
24  import java.util.Map;
25  
26  import org.apache.commons.httpclient.Header;
27  import org.apache.commons.httpclient.HttpMethod;
28  
29  /**
30   * <code>HttpClientMethodResponseToObject</code> transforms a http client response
31   * to a DefaultMuleMessage.
32   */
33  
34  public class HttpClientMethodResponseToObject extends AbstractTransformer
35  {
36  
37      public HttpClientMethodResponseToObject()
38      {
39          registerSourceType(HttpMethod.class);
40          setReturnClass(MuleMessage.class);
41      }
42  
43      public Object doTransform(Object src, String encoding) throws TransformerException
44      {
45          Object msg;
46          HttpMethod httpMethod = (HttpMethod)src;
47          
48          InputStream is;
49          try
50          {
51              is = httpMethod.getResponseBodyAsStream();
52          }
53          catch (IOException e)
54          {
55              throw new TransformerException(this, e);
56          }
57          
58          if (is == null) 
59          {
60              msg = NullPayload.getInstance();
61          }
62          else
63          {
64              msg = new ReleasingInputStream(is, httpMethod);
65          }
66          
67          // Standard headers
68          Map headerProps = new HashMap();
69          Header[] headers = httpMethod.getResponseHeaders();
70          String name;
71          for (int i = 0; i < headers.length; i++)
72          {
73              name = headers[i].getName();
74              if (name.startsWith(HttpConstants.X_PROPERTY_PREFIX))
75              {
76                  name = name.substring(2);
77              }
78              headerProps.put(name, headers[i].getValue());
79          }
80          // Set Mule Properties
81  
82          return new DefaultMuleMessage(msg, headerProps);
83      }
84  }