1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.apache.struts2.rest;
23
24 import java.io.InputStream;
25 import java.io.InputStreamReader;
26 import java.io.Reader;
27
28 import javax.servlet.http.HttpServletRequest;
29
30 import org.apache.struts2.ServletActionContext;
31 import org.apache.struts2.rest.handler.ContentTypeHandler;
32
33 import com.opensymphony.xwork2.ActionInvocation;
34 import com.opensymphony.xwork2.ModelDriven;
35 import com.opensymphony.xwork2.inject.Inject;
36 import com.opensymphony.xwork2.interceptor.Interceptor;
37
38 /***
39 * Uses the content handler to apply the request body to the action
40 */
41 public class ContentTypeInterceptor implements Interceptor {
42
43 private static final long serialVersionUID = 1L;
44 ContentTypeHandlerManager selector;
45
46 @Inject
47 public void setContentTypeHandlerSelector(ContentTypeHandlerManager sel) {
48 this.selector = sel;
49 }
50
51 public void destroy() {}
52
53 public void init() {}
54
55 public String intercept(ActionInvocation invocation) throws Exception {
56 HttpServletRequest request = ServletActionContext.getRequest();
57 ContentTypeHandler handler = selector.getHandlerForRequest(request);
58
59 Object target = invocation.getAction();
60 if (target instanceof ModelDriven) {
61 target = ((ModelDriven)target).getModel();
62 }
63
64 if (request.getContentLength() > 0) {
65 InputStream is = (InputStream) request.getInputStream();
66 InputStreamReader reader = new InputStreamReader(is);
67 handler.toObject((Reader) reader, target);
68 }
69 return invocation.invoke();
70 }
71
72 }