1 package com.atlassian.plugin.servlet;
2
3 import com.atlassian.plugin.servlet.descriptors.ServletModuleDescriptor;
4 import com.atlassian.plugin.util.ClassLoaderStack;
5
6 import javax.servlet.ServletConfig;
7 import javax.servlet.ServletContext;
8 import javax.servlet.ServletException;
9 import javax.servlet.http.HttpServlet;
10 import javax.servlet.http.HttpServletRequest;
11 import javax.servlet.http.HttpServletResponse;
12 import java.io.IOException;
13 import java.util.Enumeration;
14
15
16
17
18
19
20
21
22
23 public class DelegatingPluginServlet extends HttpServlet {
24 private final ServletModuleDescriptor descriptor;
25
26 private final HttpServlet servlet;
27
28 public DelegatingPluginServlet(final ServletModuleDescriptor descriptor) {
29 this.descriptor = descriptor;
30 servlet = descriptor.getModule();
31 }
32
33 @Override
34 public void service(final HttpServletRequest req, final HttpServletResponse res) throws ServletException, IOException {
35 ClassLoaderStack.push(descriptor.getPlugin().getClassLoader());
36 try {
37 servlet.service(new PluginHttpRequestWrapper(req, descriptor), res);
38 } finally {
39 ClassLoaderStack.pop();
40 }
41 }
42
43 @Override
44 public void init(final ServletConfig config) throws ServletException {
45 ClassLoaderStack.push(descriptor.getPlugin().getClassLoader());
46 try {
47 servlet.init(config);
48 } finally {
49 ClassLoaderStack.pop();
50 }
51 }
52
53 @Override
54 public void destroy() {
55 ClassLoaderStack.push(descriptor.getPlugin().getClassLoader());
56 try {
57 servlet.destroy();
58 } finally {
59 ClassLoaderStack.pop();
60 }
61 }
62
63 @Override
64 public boolean equals(final Object obj) {
65 return servlet.equals(obj);
66 }
67
68 @Override
69 public String getInitParameter(final String name) {
70 return servlet.getInitParameter(name);
71 }
72
73 @Override
74 public Enumeration<String> getInitParameterNames() {
75 @SuppressWarnings("unchecked")
76 final Enumeration<String> initParameterNames = servlet.getInitParameterNames();
77 return initParameterNames;
78 }
79
80 @Override
81 public ServletConfig getServletConfig() {
82 return servlet.getServletConfig();
83 }
84
85 @Override
86 public ServletContext getServletContext() {
87 return servlet.getServletContext();
88 }
89
90 @Override
91 public String getServletInfo() {
92 return servlet.getServletInfo();
93 }
94
95 @Override
96 public String getServletName() {
97 return servlet.getServletName();
98 }
99
100 @Override
101 public int hashCode() {
102 return servlet.hashCode();
103 }
104
105 @Override
106 public void init() throws ServletException {
107 servlet.init();
108 }
109
110 @Override
111 public void log(final String message, final Throwable t) {
112 servlet.log(message, t);
113 }
114
115 @Override
116 public void log(final String msg) {
117 servlet.log(msg);
118 }
119
120 @Override
121 public String toString() {
122 return servlet.toString();
123 }
124
125 public ServletModuleDescriptor getModuleDescriptor() {
126 return descriptor;
127 }
128
129 HttpServlet getDelegatingServlet() {
130 return servlet;
131 }
132 }