1 package org.apache.turbine.pipeline;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 import java.io.IOException;
25 import java.io.UnsupportedEncodingException;
26 import java.nio.charset.Charset;
27
28 import javax.servlet.http.HttpServletRequest;
29
30 import org.apache.logging.log4j.LogManager;
31 import org.apache.logging.log4j.Logger;
32 import org.apache.turbine.Turbine;
33 import org.apache.turbine.util.LocaleUtils;
34 import org.apache.turbine.util.TurbineException;
35
36
37
38
39
40
41
42
43
44
45
46
47 public class DefaultSetEncodingValve
48 implements Valve
49 {
50 private static final Logger log = LogManager.getLogger(DefaultSetEncodingValve.class);
51
52
53
54
55 @Override
56 public void invoke(PipelineData pipelineData, ValveContext context)
57 throws IOException, TurbineException
58 {
59 HttpServletRequest req = pipelineData.get(Turbine.class, HttpServletRequest.class);
60
61
62
63 String requestEncoding = req.getCharacterEncoding();
64
65 if (requestEncoding == null)
66 {
67 requestEncoding = LocaleUtils.getDefaultInputEncoding();
68 log.debug("Changing Input Encoding to {}", requestEncoding);
69
70 try
71 {
72 req.setCharacterEncoding(requestEncoding);
73 }
74 catch (UnsupportedEncodingException uee)
75 {
76 throw new TurbineException("Could not change request encoding to " + requestEncoding, uee);
77 }
78 }
79
80
81 Charset outputEncoding = LocaleUtils.getOverrideCharset();
82 if (outputEncoding == null)
83 {
84 outputEncoding = Charset.forName(requestEncoding);
85 }
86
87 pipelineData.getRunData().setCharset(outputEncoding);
88
89
90 context.invokeNext(pipelineData);
91 }
92 }