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