1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package com.acme;
20
21 import java.io.IOException;
22 import java.lang.reflect.Method;
23 import java.util.List;
24 import java.util.ArrayList;
25 import java.util.Arrays;
26
27 import javax.naming.InitialContext;
28 import javax.servlet.ServletConfig;
29 import javax.servlet.ServletException;
30 import javax.servlet.ServletOutputStream;
31 import javax.servlet.http.HttpServlet;
32 import javax.servlet.http.HttpServletRequest;
33 import javax.servlet.http.HttpServletResponse;
34 import javax.sql.DataSource;
35 import javax.transaction.UserTransaction;
36 import javax.annotation.Resource;
37 import javax.annotation.PostConstruct;
38 import javax.annotation.PreDestroy;
39 import javax.annotation.security.RunAs;
40 import javax.servlet.annotation.WebServlet;
41 import javax.servlet.annotation.WebInitParam;
42 import javax.annotation.security.DeclareRoles;
43
44
45
46
47
48
49
50
51
52
53
54 @RunAs("special")
55 @WebServlet(urlPatterns = {"/","/test/*"}, name="AnnotationTest", initParams={@WebInitParam(name="fromAnnotation", value="xyz")})
56 @DeclareRoles({"user","client"})
57 public class AnnotationTest extends HttpServlet
58 {
59 static List<String> __HandlesTypes;
60 private String postConstructResult = "";
61 private String dsResult = "";
62 private String envResult = "";
63 private String envLookupResult = "";
64 private String envResult2 ="";
65 private String envLookupResult2 = "";
66 private String envResult3 = "";
67 private String envLookupResult3 = "";
68 private String dsLookupResult = "";
69 private String txResult = "";
70 private String txLookupResult = "";
71 private DataSource myDS;
72 private ServletConfig config;
73
74 @Resource(mappedName="UserTransaction")
75 private UserTransaction myUserTransaction;
76
77
78 @Resource(mappedName="maxAmount")
79 private Double maxAmount;
80
81 @Resource(name="someAmount")
82 private Double minAmount;
83
84 @Resource
85 private Double avgAmount;
86
87
88 @Resource(mappedName="jdbc/mydatasource")
89 public void setMyDatasource(DataSource ds)
90 {
91 myDS=ds;
92 }
93
94
95 @PostConstruct
96 private void myPostConstructMethod ()
97 {
98 postConstructResult = "Called";
99 try
100 {
101 dsResult = (myDS==null?"FAIL":"myDS="+myDS.toString());
102 }
103 catch (Exception e)
104 {
105 dsResult = "FAIL: "+e;
106 }
107
108
109 envResult = (maxAmount==null?"FAIL":"maxAmount="+maxAmount.toString());
110
111 try
112 {
113 InitialContext ic = new InitialContext();
114 envLookupResult = "java:comp/env/com.acme.AnnotationTest/maxAmount="+ic.lookup("java:comp/env/com.acme.AnnotationTest/maxAmount");
115 }
116 catch (Exception e)
117 {
118 envLookupResult = "FAIL: "+e;
119 }
120
121 envResult2 = (minAmount==null?"FAIL":"minAmount="+minAmount.toString());
122 try
123 {
124 InitialContext ic = new InitialContext();
125 envLookupResult2 = "java:comp/env/someAmount="+ic.lookup("java:comp/env/someAmount");
126 }
127 catch (Exception e)
128 {
129 envLookupResult2 = "FAIL: "+e;
130 }
131 envResult3 = (minAmount==null?"FAIL":"avgAmount="+avgAmount.toString());
132 try
133 {
134 InitialContext ic = new InitialContext();
135 envLookupResult3 = "java:comp/env/com.acme.AnnotationTest/avgAmount="+ic.lookup("java:comp/env/com.acme.AnnotationTest/avgAmount");
136 }
137 catch (Exception e)
138 {
139 envLookupResult3 = "FAIL: "+e;
140 }
141
142
143
144 try
145 {
146 InitialContext ic = new InitialContext();
147 dsLookupResult = "java:comp/env/com.acme.AnnotationTest/myDatasource="+ic.lookup("java:comp/env/com.acme.AnnotationTest/myDatasource");
148 }
149 catch (Exception e)
150 {
151 dsLookupResult = "FAIL: "+e;
152 }
153
154 txResult = (myUserTransaction==null?"FAIL":"myUserTransaction="+myUserTransaction);
155 try
156 {
157 InitialContext ic = new InitialContext();
158 txLookupResult = "java:comp/env/com.acme.AnnotationTest/myUserTransaction="+ic.lookup("java:comp/env/com.acme.AnnotationTest/myUserTransaction");
159 }
160 catch (Exception e)
161 {
162 txLookupResult = "FAIL: "+e;
163 }
164 }
165
166 @PreDestroy
167 private void myPreDestroyMethod()
168 {
169 }
170
171 public void init(ServletConfig config) throws ServletException
172 {
173 super.init(config);
174 this.config = config;
175 }
176
177
178
179
180 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
181 {
182 doGet(request, response);
183 }
184
185
186 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
187 {
188 try
189 {
190 response.setContentType("text/html");
191 ServletOutputStream out = response.getOutputStream();
192 out.println("<html>");
193 out.println("<body>");
194 out.println("<h1>Results</h1>");
195
196 out.println("<h2>Init Params from Annotation</h2>");
197 out.println("<pre>");
198 out.println("initParams={@WebInitParam(name=\"fromAnnotation\", value=\"xyz\")}");
199 out.println("</pre>");
200 out.println("<br/><b>Result: "+("xyz".equals(config.getInitParameter("fromAnnotation"))? "PASS": "FAIL"));
201
202 out.println("<h2>Init Params from web-fragment</h2>");
203 out.println("<pre>");
204 out.println("extra1=123, extra2=345");
205 out.println("</pre>");
206 boolean fragInitParamResult = "123".equals(config.getInitParameter("extra1")) && "345".equals(config.getInitParameter("extra2"));
207 out.println("<br/><b>Result: "+(fragInitParamResult? "PASS": "FAIL"));
208
209
210 __HandlesTypes = Arrays.asList( "javax.servlet.GenericServlet",
211 "javax.servlet.http.HttpServlet",
212 "com.acme.AnnotationTest",
213 "com.acme.RoleAnnotationTest",
214 "com.acme.MultiPartTest",
215 "com.acme.FragmentServlet",
216 "com.acme.TestListener",
217 "com.acme.SecuredServlet",
218 "com.acme.Bar");
219 out.println("<h2>@ContainerInitializer</h2>");
220 out.println("<pre>");
221 out.println("@HandlesTypes({javax.servlet.Servlet.class, Foo.class})");
222 out.println("</pre>");
223 out.print("<br/><b>Result: ");
224 List<Class> classes = (List<Class>)config.getServletContext().getAttribute("com.acme.Foo");
225 List<String> classNames = new ArrayList<String>();
226 if (classes != null)
227 {
228 for (Class c: classes)
229 {
230 classNames.add(c.getName());
231 out.print(c.getName()+" ");
232 }
233
234 if (classNames.size() != __HandlesTypes.size())
235 out.println("<br/>FAIL");
236 else if (!classNames.containsAll(__HandlesTypes))
237 out.println("<br/>FAIL");
238 else
239 out.println("<br/>PASS");
240 }
241 else
242 out.print("<br/>FAIL (No such attribute com.acme.Foo)");
243 out.println("</b>");
244
245 out.println("<h2>Complete Servlet Registration</h2>");
246 Boolean complete = (Boolean)config.getServletContext().getAttribute("com.acme.AnnotationTest.complete");
247 out.println("<br/><b>Result: "+(complete.booleanValue()?"PASS":"FAIL")+"</b>");
248
249 out.println("<h2>@PostConstruct Callback</h2>");
250 out.println("<pre>");
251 out.println("@PostConstruct");
252 out.println("private void myPostConstructMethod ()");
253 out.println("{}");
254 out.println("</pre>");
255 out.println("<br/><b>Result: "+postConstructResult+"</b>");
256
257
258 out.println("<h2>@Resource Injection for DataSource</h2>");
259 out.println("<pre>");
260 out.println("@Resource(mappedName=\"jdbc/mydatasource\");");
261 out.println("public void setMyDatasource(DataSource ds)");
262 out.println("{");
263 out.println("myDS=ds;");
264 out.println("}");
265 out.println("</pre>");
266 out.println("<br/><b>Result: "+dsResult+"</b>");
267 out.println("<br/><b>JNDI Lookup Result: "+dsLookupResult+"</b>");
268
269
270 out.println("<h2>@Resource Injection for env-entry </h2>");
271 out.println("<pre>");
272 out.println("@Resource(mappedName=\"maxAmount\")");
273 out.println("private Double maxAmount;");
274 out.println("@Resource(name=\"minAmount\")");
275 out.println("private Double minAmount;");
276 out.println("</pre>");
277 out.println("<br/><b>Result: "+envResult+": "+(maxAmount.compareTo(new Double(55))==0?" PASS":" FAIL")+"</b>");
278 out.println("<br/><b>JNDI Lookup Result: "+envLookupResult+"</b>");
279 out.println("<br/><b>Result: "+envResult2+": "+(minAmount.compareTo(new Double("0.99"))==0?" PASS":" FAIL")+"</b>");
280 out.println("<br/><b>JNDI Lookup Result: "+envLookupResult2+"</b>");
281 out.println("<br/><b>Result: "+envResult3+": "+(avgAmount.compareTo(new Double("1.25"))==0?" PASS":" FAIL")+"</b>");
282 out.println("<br/><b>JNDI Lookup Result: "+envLookupResult3+"</b>");
283 out.println("<h2>@Resource Injection for UserTransaction </h2>");
284 out.println("<pre>");
285 out.println("@Resource(mappedName=\"UserTransaction\")");
286 out.println("private UserTransaction myUserTransaction;");
287 out.println("</pre>");
288 out.println("<br/><b>Result: "+txResult+"</b>");
289 out.println("<br/><b>JNDI Lookup Result: "+txLookupResult+"</b>");
290 out.println("<h2>DeclaresRoles</h2>");
291 out.println("<p>Login as user \"admin\" with password \"admin\" when prompted after clicking the button below to test @DeclareRoles annotation</p>");
292 String context = request.getContextPath();
293 if (!context.endsWith("/"))
294 context += "/";
295 context += "role/";
296 out.println("<form action="+context+" method=\"post\"><button type=\"submit\">Test Role Annotations</button></form>");
297
298 out.println("<h2>ServletSecurity</h2>");
299 out.println("<p>Login as user \"admin\" with password \"admin\" when prompted after clicking the button below to test @ServletSecurity annotation</p>");
300 context = request.getContextPath();
301 if (!context.endsWith("/"))
302 context += "/";
303 context += "sec/foo";
304 out.println("<form action="+context+" method=\"post\"><button type=\"submit\">Test ServletSecurity Annotation</button></form>");
305
306
307 out.println("</body>");
308 out.println("</html>");
309 out.flush();
310 }
311 catch (Exception e)
312 {
313 throw new ServletException(e);
314 }
315 }
316
317
318
319
320 }