1
2
3
4
5
6
7
8
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
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
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 }