1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 package org.apache.struts2.impl;
24
25 import com.opensymphony.xwork2.ObjectFactory;
26 import com.opensymphony.xwork2.Result;
27 import com.opensymphony.xwork2.config.ConfigurationException;
28 import com.opensymphony.xwork2.config.entities.InterceptorConfig;
29 import com.opensymphony.xwork2.config.entities.ResultConfig;
30 import com.opensymphony.xwork2.interceptor.Interceptor;
31 import com.opensymphony.xwork2.util.OgnlUtil;
32
33 import java.util.HashMap;
34 import java.util.Map;
35
36 public class StrutsObjectFactory extends ObjectFactory {
37
38 public Interceptor buildInterceptor(InterceptorConfig interceptorConfig, Map refParams)
39 throws ConfigurationException {
40 String className = interceptorConfig.getClassName();
41
42 Map<String, String> params = new HashMap<String, String>();
43 Map typeParams = interceptorConfig.getParams();
44 if (typeParams != null && !typeParams.isEmpty())
45 params.putAll(typeParams);
46 if (refParams != null && !refParams.isEmpty())
47 params.putAll(refParams);
48 params.putAll(refParams);
49
50 try {
51
52
53 Object o = buildBean(className, null);
54 OgnlUtil.setProperties(params, o);
55
56 if (o instanceof Interceptor) {
57 Interceptor interceptor = (Interceptor) o;
58 interceptor.init();
59 return interceptor;
60 }
61
62
63
64
65
66 throw new ConfigurationException(
67 "Class [" + className + "] does not implement Interceptor", interceptorConfig);
68 } catch (InstantiationException e) {
69 throw new ConfigurationException(
70 "Unable to instantiate an instance of Interceptor class [" + className + "].",
71 e, interceptorConfig);
72 } catch (IllegalAccessException e) {
73 throw new ConfigurationException(
74 "IllegalAccessException while attempting to instantiate an instance of Interceptor class ["
75 + className + "].",
76 e, interceptorConfig);
77 } catch (Exception e) {
78 throw new ConfigurationException(
79 "Caught Exception while registering Interceptor class " + className,
80 e, interceptorConfig);
81 } catch (NoClassDefFoundError e) {
82 throw new ConfigurationException(
83 "Could not load class " + className
84 + ". Perhaps it exists but certain dependencies are not available?",
85 e, interceptorConfig);
86 }
87 }
88
89 public Result buildResult(ResultConfig resultConfig, Map extraContext) throws Exception {
90 String resultClassName = resultConfig.getClassName();
91 if (resultClassName == null)
92 return null;
93
94 Object result = buildBean(resultClassName, extraContext);
95 OgnlUtil.setProperties(resultConfig.getParams(), result, extraContext);
96
97 if (result instanceof Result)
98 return (Result) result;
99
100
101
102
103
104 throw new ConfigurationException(result.getClass().getName() + " does not implement Result.");
105 }
106 }