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