Skip to content

Commit 994adb3

Browse files
basildaniel-beck
andauthored
[JENKINS-73258] Migrate Stapler from EE 8 to EE 9 (#482)
Co-authored-by: Daniel Beck <[email protected]>
1 parent 7d65cd7 commit 994adb3

File tree

177 files changed

+10415
-562
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

177 files changed

+10415
-562
lines changed

core/example/src/example/Book.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package example;
22

3+
import jakarta.servlet.ServletException;
34
import java.io.IOException;
4-
import javax.servlet.ServletException;
55
import org.kohsuke.stapler.StaplerRequest;
66
import org.kohsuke.stapler.StaplerResponse;
77

core/example/src/example/BookStore.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package example;
22

3+
import jakarta.servlet.ServletException;
34
import java.io.IOException;
45
import java.util.Hashtable;
56
import java.util.Map;
6-
import javax.servlet.ServletException;
77
import org.kohsuke.stapler.StaplerRequest;
88
import org.kohsuke.stapler.StaplerResponse;
99

core/example/src/example/WebAppMain.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package example;
22

3-
import javax.servlet.ServletContextEvent;
4-
import javax.servlet.ServletContextListener;
3+
import jakarta.servlet.ServletContextEvent;
4+
import jakarta.servlet.ServletContextListener;
55
import org.kohsuke.stapler.Stapler;
66

77
/**

core/maven-example/pom.xml

+9-9
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,21 @@
1616
<version>1.253</version>
1717
</dependency>
1818
<dependency>
19-
<groupId>javax.servlet.jsp.jstl</groupId>
20-
<artifactId>javax.servlet.jsp.jstl-api</artifactId>
21-
<version>1.2.1</version>
19+
<groupId>jakarta.servlet.jsp.jstl</groupId>
20+
<artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
21+
<version>2.0.0</version>
2222
</dependency>
2323

2424
<dependency>
25-
<groupId>javax.servlet</groupId>
26-
<artifactId>javax.servlet-api</artifactId>
27-
<version>3.1.0</version>
25+
<groupId>jakarta.servlet</groupId>
26+
<artifactId>jakarta.servlet-api</artifactId>
27+
<version>5.0.0</version>
2828
<scope>provided</scope>
2929
</dependency>
3030
<dependency>
31-
<groupId>javax.servlet.jsp</groupId>
32-
<artifactId>javax.servlet.jsp-api</artifactId>
33-
<version>2.3.0</version>
31+
<groupId>jakarta.servlet.jsp</groupId>
32+
<artifactId>jakarta.servlet.jsp-api</artifactId>
33+
<version>3.0.0</version>
3434
<scope>provided</scope>
3535
</dependency>
3636
</dependencies>

core/maven-example/src/main/java/example/Book.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package example;
22

3+
import jakarta.servlet.ServletException;
34
import java.io.IOException;
4-
import javax.servlet.ServletException;
55
import org.kohsuke.stapler.StaplerRequest;
66
import org.kohsuke.stapler.StaplerResponse;
77

core/maven-example/src/main/java/example/BookStore.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package example;
22

3+
import jakarta.servlet.ServletException;
34
import java.io.IOException;
45
import java.util.Hashtable;
56
import java.util.Map;
6-
import javax.servlet.ServletException;
77
import org.kohsuke.stapler.StaplerRequest;
88
import org.kohsuke.stapler.StaplerResponse;
99

core/maven-example/src/main/java/example/WebAppMain.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package example;
22

3-
import javax.servlet.ServletContextEvent;
4-
import javax.servlet.ServletContextListener;
3+
import jakarta.servlet.ServletContextEvent;
4+
import jakarta.servlet.ServletContextListener;
55
import org.kohsuke.stapler.Stapler;
66

77
/**

core/pom.xml

+11-6
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@
6565
</dependency>
6666
<dependency>
6767
<groupId>org.apache.commons</groupId>
68-
<artifactId>commons-fileupload2-javax</artifactId>
68+
<artifactId>commons-fileupload2-jakarta-servlet5</artifactId>
6969
<version>${commons-fileupload2.version}</version>
7070
</dependency>
7171
<dependency>
@@ -79,6 +79,11 @@
7979
<version>2.4.21</version>
8080
<optional>true</optional>
8181
</dependency>
82+
<dependency>
83+
<groupId>org.eclipse.jetty.toolchain</groupId>
84+
<artifactId>jetty-servlet-api</artifactId>
85+
<version>4.0.6</version>
86+
</dependency>
8287
<dependency>
8388
<groupId>org.jenkins-ci</groupId>
8489
<artifactId>annotation-indexer</artifactId>
@@ -108,7 +113,7 @@
108113
<dependency>
109114
<groupId>jakarta.servlet</groupId>
110115
<artifactId>jakarta.servlet-api</artifactId>
111-
<version>4.0.4</version>
116+
<version>5.0.0</version>
112117
<scope>provided</scope>
113118
</dependency>
114119
<dependency>
@@ -140,13 +145,13 @@
140145
<scope>test</scope>
141146
</dependency>
142147
<dependency>
143-
<groupId>org.eclipse.jetty.ee8</groupId>
144-
<artifactId>jetty-ee8-servlet</artifactId>
148+
<groupId>org.eclipse.jetty.ee9</groupId>
149+
<artifactId>jetty-ee9-servlet</artifactId>
145150
<scope>test</scope>
146151
</dependency>
147152
<dependency>
148-
<groupId>org.eclipse.jetty.ee8</groupId>
149-
<artifactId>jetty-ee8-webapp</artifactId>
153+
<groupId>org.eclipse.jetty.ee9</groupId>
154+
<artifactId>jetty-ee9-webapp</artifactId>
150155
<scope>test</scope>
151156
</dependency>
152157
<dependency>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,192 @@
1+
package io.jenkins.servlet;
2+
3+
import io.jenkins.servlet.http.HttpServletRequestWrapper;
4+
import io.jenkins.servlet.http.HttpServletResponseWrapper;
5+
import java.util.Objects;
6+
import javax.servlet.AsyncContext;
7+
import javax.servlet.AsyncListener;
8+
import javax.servlet.ServletContext;
9+
import javax.servlet.ServletRequest;
10+
import javax.servlet.ServletResponse;
11+
import javax.servlet.http.HttpServletRequest;
12+
import javax.servlet.http.HttpServletResponse;
13+
14+
public class AsyncContextWrapper {
15+
public static jakarta.servlet.AsyncContext toJakartaAsyncContext(AsyncContext from) {
16+
Objects.requireNonNull(from);
17+
return new jakarta.servlet.AsyncContext() {
18+
@Override
19+
public jakarta.servlet.ServletRequest getRequest() {
20+
ServletRequest request = from.getRequest();
21+
return request instanceof HttpServletRequest
22+
? HttpServletRequestWrapper.toJakartaHttpServletRequest(((HttpServletRequest) request))
23+
: io.jenkins.servlet.ServletRequestWrapper.toJakartaServletRequest(request);
24+
}
25+
26+
@Override
27+
public jakarta.servlet.ServletResponse getResponse() {
28+
ServletResponse response = from.getResponse();
29+
return response instanceof HttpServletResponse
30+
? HttpServletResponseWrapper.toJakartaHttpServletResponse(((HttpServletResponse) response))
31+
: ServletResponseWrapper.toJakartaServletResponse(response);
32+
}
33+
34+
@Override
35+
public boolean hasOriginalRequestAndResponse() {
36+
return from.hasOriginalRequestAndResponse();
37+
}
38+
39+
@Override
40+
public void dispatch() {
41+
from.dispatch();
42+
}
43+
44+
@Override
45+
public void dispatch(String path) {
46+
from.dispatch(path);
47+
}
48+
49+
@Override
50+
public void dispatch(jakarta.servlet.ServletContext context, String path) {
51+
from.dispatch(ServletContextWrapper.fromJakartServletContext(context), path);
52+
}
53+
54+
@Override
55+
public void complete() {
56+
from.complete();
57+
}
58+
59+
@Override
60+
public void start(Runnable run) {
61+
from.start(run);
62+
}
63+
64+
@Override
65+
public void addListener(jakarta.servlet.AsyncListener listener) {
66+
from.addListener(AsyncListenerWrapper.fromJakartaAsyncListener(listener));
67+
}
68+
69+
@Override
70+
public void addListener(
71+
jakarta.servlet.AsyncListener listener,
72+
jakarta.servlet.ServletRequest servletRequest,
73+
jakarta.servlet.ServletResponse servletResponse) {
74+
from.addListener(
75+
AsyncListenerWrapper.fromJakartaAsyncListener(listener),
76+
servletRequest instanceof jakarta.servlet.http.HttpServletRequest
77+
? HttpServletRequestWrapper.fromJakartaHttpServletRequest(
78+
(jakarta.servlet.http.HttpServletRequest) servletRequest)
79+
: io.jenkins.servlet.ServletRequestWrapper.fromJakartaServletRequest(servletRequest),
80+
servletResponse instanceof jakarta.servlet.http.HttpServletResponse
81+
? HttpServletResponseWrapper.fromJakartaHttpServletResponse(
82+
(jakarta.servlet.http.HttpServletResponse) servletResponse)
83+
: ServletResponseWrapper.fromJakartaServletResponse(servletResponse));
84+
}
85+
86+
@Override
87+
public <T extends jakarta.servlet.AsyncListener> T createListener(Class<T> clazz) {
88+
// TODO implement this
89+
throw new UnsupportedOperationException();
90+
}
91+
92+
@Override
93+
public void setTimeout(long timeout) {
94+
from.setTimeout(timeout);
95+
}
96+
97+
@Override
98+
public long getTimeout() {
99+
return from.getTimeout();
100+
}
101+
};
102+
}
103+
104+
public static AsyncContext fromJakartaAsyncContext(jakarta.servlet.AsyncContext from) {
105+
Objects.requireNonNull(from);
106+
return new AsyncContext() {
107+
@Override
108+
public ServletRequest getRequest() {
109+
jakarta.servlet.ServletRequest request = from.getRequest();
110+
return request instanceof jakarta.servlet.http.HttpServletRequest
111+
? HttpServletRequestWrapper.fromJakartaHttpServletRequest(
112+
(jakarta.servlet.http.HttpServletRequest) request)
113+
: ServletRequestWrapper.fromJakartaServletRequest(request);
114+
}
115+
116+
@Override
117+
public ServletResponse getResponse() {
118+
jakarta.servlet.ServletResponse response = from.getResponse();
119+
return response instanceof jakarta.servlet.http.HttpServletResponse
120+
? HttpServletResponseWrapper.fromJakartaHttpServletResponse(
121+
(jakarta.servlet.http.HttpServletResponse) response)
122+
: ServletResponseWrapper.fromJakartaServletResponse(response);
123+
}
124+
125+
@Override
126+
public boolean hasOriginalRequestAndResponse() {
127+
return from.hasOriginalRequestAndResponse();
128+
}
129+
130+
@Override
131+
public void dispatch() {
132+
from.dispatch();
133+
}
134+
135+
@Override
136+
public void dispatch(String path) {
137+
from.dispatch(path);
138+
}
139+
140+
@Override
141+
public void dispatch(ServletContext context, String path) {
142+
from.dispatch(ServletContextWrapper.toJakartaServletContext(context), path);
143+
}
144+
145+
@Override
146+
public void complete() {
147+
from.complete();
148+
}
149+
150+
@Override
151+
public void start(Runnable run) {
152+
from.start(run);
153+
}
154+
155+
@Override
156+
public void addListener(AsyncListener listener) {
157+
from.addListener(AsyncListenerWrapper.toJakartaAsyncListener(listener));
158+
}
159+
160+
@Override
161+
public void addListener(
162+
AsyncListener listener, ServletRequest servletRequest, ServletResponse servletResponse) {
163+
from.addListener(
164+
AsyncListenerWrapper.toJakartaAsyncListener(listener),
165+
servletRequest instanceof HttpServletRequest
166+
? HttpServletRequestWrapper.toJakartaHttpServletRequest(
167+
((HttpServletRequest) servletRequest))
168+
: io.jenkins.servlet.ServletRequestWrapper.toJakartaServletRequest(servletRequest),
169+
servletResponse instanceof HttpServletResponse
170+
? HttpServletResponseWrapper.toJakartaHttpServletResponse(
171+
((HttpServletResponse) servletResponse))
172+
: ServletResponseWrapper.toJakartaServletResponse(servletResponse));
173+
}
174+
175+
@Override
176+
public <T extends AsyncListener> T createListener(Class<T> clazz) {
177+
// TODO implement this
178+
throw new UnsupportedOperationException();
179+
}
180+
181+
@Override
182+
public void setTimeout(long timeout) {
183+
from.setTimeout(timeout);
184+
}
185+
186+
@Override
187+
public long getTimeout() {
188+
return from.getTimeout();
189+
}
190+
};
191+
}
192+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package io.jenkins.servlet;
2+
3+
import java.util.Objects;
4+
import javax.servlet.AsyncEvent;
5+
6+
public class AsyncEventWrapper {
7+
public static jakarta.servlet.AsyncEvent toJakartaServletHttpAsyncEvent(AsyncEvent from) {
8+
Objects.requireNonNull(from);
9+
return new jakarta.servlet.AsyncEvent(
10+
AsyncContextWrapper.toJakartaAsyncContext(from.getAsyncContext()),
11+
io.jenkins.servlet.ServletRequestWrapper.toJakartaServletRequest(from.getSuppliedRequest()),
12+
ServletResponseWrapper.toJakartaServletResponse(from.getSuppliedResponse()),
13+
from.getThrowable());
14+
}
15+
16+
public static AsyncEvent fromJakartaServletHttpAsyncEvent(jakarta.servlet.AsyncEvent from) {
17+
Objects.requireNonNull(from);
18+
return new AsyncEvent(
19+
AsyncContextWrapper.fromJakartaAsyncContext(from.getAsyncContext()),
20+
ServletRequestWrapper.fromJakartaServletRequest(from.getSuppliedRequest()),
21+
ServletResponseWrapper.fromJakartaServletResponse(from.getSuppliedResponse()),
22+
from.getThrowable());
23+
}
24+
}

0 commit comments

Comments
 (0)