View Javadoc

1   /*
2    * $Id: HttpRequestToParameter.java 19250 2010-08-30 16:53:14Z dirk.olmes $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.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.servlet.transformers;
12  
13  import org.mule.api.MuleMessage;
14  import org.mule.api.transformer.TransformerException;
15  import org.mule.transformer.AbstractMessageTransformer;
16  import org.mule.transformer.types.DataTypeFactory;
17  import org.mule.transport.servlet.AbstractReceiverServlet;
18  import org.mule.transport.servlet.ServletConnector;
19  import org.mule.util.SystemUtils;
20  
21  import java.io.BufferedReader;
22  import java.io.IOException;
23  import java.io.InputStream;
24  import java.io.InputStreamReader;
25  import java.util.Properties;
26  
27  public class HttpRequestToParameter extends AbstractMessageTransformer
28  {
29      public HttpRequestToParameter()
30      {
31          registerSourceType(DataTypeFactory.OBJECT);
32          setReturnDataType(DataTypeFactory.STRING);
33      }
34  
35      @Override
36      public Object transformMessage(MuleMessage message, String outputEncoding) throws TransformerException
37      {
38          String payloadParam = message.getOutboundProperty(AbstractReceiverServlet.PAYLOAD_PARAMETER_NAME,
39                                                            AbstractReceiverServlet.DEFAULT_PAYLOAD_PARAMETER_NAME);
40  
41          String payload = message.getInboundProperty(payloadParam);
42          if (payload == null)
43          {
44              // Plain text
45              String contentType =
46                      message.getOutboundProperty(ServletConnector.CONTENT_TYPE_PROPERTY_KEY);
47              if ((contentType == null) || contentType.startsWith("text/"))
48              {
49                  try
50                  {
51                      InputStream is = (InputStream) message.getPayload();
52  
53                      String characterEncoding =
54                              message.getOutboundProperty(ServletConnector.CHARACTER_ENCODING_PROPERTY_KEY);
55                      BufferedReader reader;
56                      if (characterEncoding != null)
57                      {
58                          reader = new BufferedReader(new InputStreamReader(is, characterEncoding));
59                      }
60                      else
61                      {
62                          reader = new BufferedReader(new InputStreamReader(is));
63                      }
64                      
65                      StringBuffer buffer = new StringBuffer(8192);
66                      String line = reader.readLine();
67                      while (line != null)
68                      {
69                          buffer.append(line);
70                          line = reader.readLine();
71                          if (line != null) buffer.append(SystemUtils.LINE_SEPARATOR);
72                      }
73                      payload = buffer.toString();
74                  }
75                  catch (IOException e)
76                  {
77                      throw new TransformerException(this, e);
78                  }
79              }
80              // HTTP Form
81              else if (contentType.equals("application/x-www-form-urlencoded"))
82              {
83                  InputStream is = (InputStream) message.getPayload();
84                  Properties props = new Properties();
85                  try
86                  {
87                      props.load(is);
88                  }
89                  catch (IOException e)
90                  {
91                      throw new TransformerException(this, e);
92                  }
93                  finally
94                  {
95                      try
96                      {
97                          is.close();
98                      }
99                      catch (IOException e2)
100                     {
101                         throw new TransformerException(this, e2);
102                     }
103                 }
104                 return props.get(payloadParam);
105             }
106         }
107 
108         return payload;
109     }
110 }