This repository has been archived by the owner on Jul 17, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Move compatibility layer to separate package (#10)
- Loading branch information
Showing
75 changed files
with
5,584 additions
and
5,403 deletions.
There are no files selected for viewing
192 changes: 192 additions & 0 deletions
192
src/main/java/io/jenkins/servlet/AsyncContextWrapper.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,192 @@ | ||
package io.jenkins.servlet; | ||
|
||
import io.jenkins.servlet.http.HttpServletRequestWrapper; | ||
import io.jenkins.servlet.http.HttpServletResponseWrapper; | ||
import java.util.Objects; | ||
import javax.servlet.AsyncContext; | ||
import javax.servlet.AsyncListener; | ||
import javax.servlet.ServletContext; | ||
import javax.servlet.ServletRequest; | ||
import javax.servlet.ServletResponse; | ||
import javax.servlet.http.HttpServletRequest; | ||
import javax.servlet.http.HttpServletResponse; | ||
|
||
public class AsyncContextWrapper { | ||
public static jakarta.servlet.AsyncContext toJakartaAsyncContext(AsyncContext from) { | ||
Objects.requireNonNull(from); | ||
return new jakarta.servlet.AsyncContext() { | ||
@Override | ||
public jakarta.servlet.ServletRequest getRequest() { | ||
ServletRequest request = from.getRequest(); | ||
return request instanceof HttpServletRequest | ||
? HttpServletRequestWrapper.toJakartaHttpServletRequest(((HttpServletRequest) request)) | ||
: io.jenkins.servlet.ServletRequestWrapper.toJakartaServletRequest(request); | ||
} | ||
|
||
@Override | ||
public jakarta.servlet.ServletResponse getResponse() { | ||
ServletResponse response = from.getResponse(); | ||
return response instanceof HttpServletResponse | ||
? HttpServletResponseWrapper.toJakartaHttpServletResponse(((HttpServletResponse) response)) | ||
: ServletResponseWrapper.toJakartaServletResponse(response); | ||
} | ||
|
||
@Override | ||
public boolean hasOriginalRequestAndResponse() { | ||
return from.hasOriginalRequestAndResponse(); | ||
} | ||
|
||
@Override | ||
public void dispatch() { | ||
from.dispatch(); | ||
} | ||
|
||
@Override | ||
public void dispatch(String path) { | ||
from.dispatch(path); | ||
} | ||
|
||
@Override | ||
public void dispatch(jakarta.servlet.ServletContext context, String path) { | ||
from.dispatch(ServletContextWrapper.fromJakartServletContext(context), path); | ||
} | ||
|
||
@Override | ||
public void complete() { | ||
from.complete(); | ||
} | ||
|
||
@Override | ||
public void start(Runnable run) { | ||
from.start(run); | ||
} | ||
|
||
@Override | ||
public void addListener(jakarta.servlet.AsyncListener listener) { | ||
from.addListener(AsyncListenerWrapper.fromJakartaAsyncListener(listener)); | ||
} | ||
|
||
@Override | ||
public void addListener( | ||
jakarta.servlet.AsyncListener listener, | ||
jakarta.servlet.ServletRequest servletRequest, | ||
jakarta.servlet.ServletResponse servletResponse) { | ||
from.addListener( | ||
AsyncListenerWrapper.fromJakartaAsyncListener(listener), | ||
servletRequest instanceof jakarta.servlet.http.HttpServletRequest | ||
? HttpServletRequestWrapper.fromJakartaHttpServletRequest( | ||
(jakarta.servlet.http.HttpServletRequest) servletRequest) | ||
: io.jenkins.servlet.ServletRequestWrapper.fromJakartaServletRequest(servletRequest), | ||
servletResponse instanceof jakarta.servlet.http.HttpServletResponse | ||
? HttpServletResponseWrapper.fromJakartaHttpServletResponse( | ||
(jakarta.servlet.http.HttpServletResponse) servletResponse) | ||
: ServletResponseWrapper.fromJakartaServletResponse(servletResponse)); | ||
} | ||
|
||
@Override | ||
public <T extends jakarta.servlet.AsyncListener> T createListener(Class<T> clazz) { | ||
// TODO implement this | ||
throw new UnsupportedOperationException(); | ||
} | ||
|
||
@Override | ||
public void setTimeout(long timeout) { | ||
from.setTimeout(timeout); | ||
} | ||
|
||
@Override | ||
public long getTimeout() { | ||
return from.getTimeout(); | ||
} | ||
}; | ||
} | ||
|
||
public static AsyncContext fromJakartaAsyncContext(jakarta.servlet.AsyncContext from) { | ||
Objects.requireNonNull(from); | ||
return new AsyncContext() { | ||
@Override | ||
public ServletRequest getRequest() { | ||
jakarta.servlet.ServletRequest request = from.getRequest(); | ||
return request instanceof jakarta.servlet.http.HttpServletRequest | ||
? HttpServletRequestWrapper.fromJakartaHttpServletRequest( | ||
(jakarta.servlet.http.HttpServletRequest) request) | ||
: ServletRequestWrapper.fromJakartaServletRequest(request); | ||
} | ||
|
||
@Override | ||
public ServletResponse getResponse() { | ||
jakarta.servlet.ServletResponse response = from.getResponse(); | ||
return response instanceof jakarta.servlet.http.HttpServletResponse | ||
? HttpServletResponseWrapper.fromJakartaHttpServletResponse( | ||
(jakarta.servlet.http.HttpServletResponse) response) | ||
: ServletResponseWrapper.fromJakartaServletResponse(response); | ||
} | ||
|
||
@Override | ||
public boolean hasOriginalRequestAndResponse() { | ||
return from.hasOriginalRequestAndResponse(); | ||
} | ||
|
||
@Override | ||
public void dispatch() { | ||
from.dispatch(); | ||
} | ||
|
||
@Override | ||
public void dispatch(String path) { | ||
from.dispatch(path); | ||
} | ||
|
||
@Override | ||
public void dispatch(ServletContext context, String path) { | ||
from.dispatch(ServletContextWrapper.toJakartaServletContext(context), path); | ||
} | ||
|
||
@Override | ||
public void complete() { | ||
from.complete(); | ||
} | ||
|
||
@Override | ||
public void start(Runnable run) { | ||
from.start(run); | ||
} | ||
|
||
@Override | ||
public void addListener(AsyncListener listener) { | ||
from.addListener(AsyncListenerWrapper.toJakartaAsyncListener(listener)); | ||
} | ||
|
||
@Override | ||
public void addListener( | ||
AsyncListener listener, ServletRequest servletRequest, ServletResponse servletResponse) { | ||
from.addListener( | ||
AsyncListenerWrapper.toJakartaAsyncListener(listener), | ||
servletRequest instanceof HttpServletRequest | ||
? HttpServletRequestWrapper.toJakartaHttpServletRequest( | ||
((HttpServletRequest) servletRequest)) | ||
: io.jenkins.servlet.ServletRequestWrapper.toJakartaServletRequest(servletRequest), | ||
servletResponse instanceof HttpServletResponse | ||
? HttpServletResponseWrapper.toJakartaHttpServletResponse( | ||
((HttpServletResponse) servletResponse)) | ||
: ServletResponseWrapper.toJakartaServletResponse(servletResponse)); | ||
} | ||
|
||
@Override | ||
public <T extends AsyncListener> T createListener(Class<T> clazz) { | ||
// TODO implement this | ||
throw new UnsupportedOperationException(); | ||
} | ||
|
||
@Override | ||
public void setTimeout(long timeout) { | ||
from.setTimeout(timeout); | ||
} | ||
|
||
@Override | ||
public long getTimeout() { | ||
return from.getTimeout(); | ||
} | ||
}; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
package io.jenkins.servlet; | ||
|
||
import java.util.Objects; | ||
import javax.servlet.AsyncEvent; | ||
|
||
public class AsyncEventWrapper { | ||
public static jakarta.servlet.AsyncEvent toJakartaServletHttpAsyncEvent(AsyncEvent from) { | ||
Objects.requireNonNull(from); | ||
return new jakarta.servlet.AsyncEvent( | ||
AsyncContextWrapper.toJakartaAsyncContext(from.getAsyncContext()), | ||
io.jenkins.servlet.ServletRequestWrapper.toJakartaServletRequest(from.getSuppliedRequest()), | ||
ServletResponseWrapper.toJakartaServletResponse(from.getSuppliedResponse()), | ||
from.getThrowable()); | ||
} | ||
|
||
public static AsyncEvent fromJakartaServletHttpAsyncEvent(jakarta.servlet.AsyncEvent from) { | ||
Objects.requireNonNull(from); | ||
return new AsyncEvent( | ||
AsyncContextWrapper.fromJakartaAsyncContext(from.getAsyncContext()), | ||
ServletRequestWrapper.fromJakartaServletRequest(from.getSuppliedRequest()), | ||
ServletResponseWrapper.fromJakartaServletResponse(from.getSuppliedResponse()), | ||
from.getThrowable()); | ||
} | ||
} |
60 changes: 60 additions & 0 deletions
60
src/main/java/io/jenkins/servlet/AsyncListenerWrapper.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
package io.jenkins.servlet; | ||
|
||
import java.io.IOException; | ||
import java.util.Objects; | ||
import javax.servlet.AsyncEvent; | ||
import javax.servlet.AsyncListener; | ||
|
||
public class AsyncListenerWrapper { | ||
public static jakarta.servlet.AsyncListener toJakartaAsyncListener(AsyncListener from) { | ||
Objects.requireNonNull(from); | ||
return new jakarta.servlet.AsyncListener() { | ||
|
||
@Override | ||
public void onComplete(jakarta.servlet.AsyncEvent event) throws IOException { | ||
from.onComplete(AsyncEventWrapper.fromJakartaServletHttpAsyncEvent(event)); | ||
} | ||
|
||
@Override | ||
public void onTimeout(jakarta.servlet.AsyncEvent event) throws IOException { | ||
from.onTimeout(AsyncEventWrapper.fromJakartaServletHttpAsyncEvent(event)); | ||
} | ||
|
||
@Override | ||
public void onError(jakarta.servlet.AsyncEvent event) throws IOException { | ||
from.onError(AsyncEventWrapper.fromJakartaServletHttpAsyncEvent(event)); | ||
} | ||
|
||
@Override | ||
public void onStartAsync(jakarta.servlet.AsyncEvent event) throws IOException { | ||
from.onStartAsync(AsyncEventWrapper.fromJakartaServletHttpAsyncEvent(event)); | ||
} | ||
}; | ||
} | ||
|
||
public static AsyncListener fromJakartaAsyncListener(jakarta.servlet.AsyncListener from) { | ||
Objects.requireNonNull(from); | ||
return new AsyncListener() { | ||
|
||
@Override | ||
public void onComplete(AsyncEvent event) throws IOException { | ||
from.onComplete(AsyncEventWrapper.toJakartaServletHttpAsyncEvent(event)); | ||
} | ||
|
||
@Override | ||
public void onTimeout(AsyncEvent event) throws IOException { | ||
from.onTimeout(AsyncEventWrapper.toJakartaServletHttpAsyncEvent(event)); | ||
} | ||
|
||
@Override | ||
public void onError(AsyncEvent event) throws IOException { | ||
from.onError(AsyncEventWrapper.toJakartaServletHttpAsyncEvent(event)); | ||
} | ||
|
||
@Override | ||
public void onStartAsync(AsyncEvent event) throws IOException { | ||
from.onStartAsync(AsyncEventWrapper.toJakartaServletHttpAsyncEvent(event)); | ||
} | ||
}; | ||
} | ||
} |
42 changes: 42 additions & 0 deletions
42
src/main/java/io/jenkins/servlet/DispatcherTypeWrapper.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
package io.jenkins.servlet; | ||
|
||
import java.util.Objects; | ||
import javax.servlet.DispatcherType; | ||
|
||
public class DispatcherTypeWrapper { | ||
public static jakarta.servlet.DispatcherType toJakartaDispatcherType(DispatcherType from) { | ||
Objects.requireNonNull(from); | ||
switch (from) { | ||
case FORWARD: | ||
return jakarta.servlet.DispatcherType.FORWARD; | ||
case INCLUDE: | ||
return jakarta.servlet.DispatcherType.INCLUDE; | ||
case REQUEST: | ||
return jakarta.servlet.DispatcherType.REQUEST; | ||
case ASYNC: | ||
return jakarta.servlet.DispatcherType.ASYNC; | ||
case ERROR: | ||
return jakarta.servlet.DispatcherType.ERROR; | ||
default: | ||
throw new IllegalArgumentException("Unknown DispatcherType: " + from); | ||
} | ||
} | ||
|
||
public static DispatcherType fromJakartaDispatcherType(jakarta.servlet.DispatcherType from) { | ||
Objects.requireNonNull(from); | ||
switch (from) { | ||
case FORWARD: | ||
return DispatcherType.FORWARD; | ||
case INCLUDE: | ||
return DispatcherType.INCLUDE; | ||
case REQUEST: | ||
return DispatcherType.REQUEST; | ||
case ASYNC: | ||
return DispatcherType.ASYNC; | ||
case ERROR: | ||
return DispatcherType.ERROR; | ||
default: | ||
throw new IllegalArgumentException("Unknown DispatcherType: " + from); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
package io.jenkins.servlet; | ||
|
||
import io.jenkins.servlet.http.HttpServletRequestWrapper; | ||
import io.jenkins.servlet.http.HttpServletResponseWrapper; | ||
import java.io.IOException; | ||
import java.util.Objects; | ||
import javax.servlet.FilterChain; | ||
import javax.servlet.ServletException; | ||
import javax.servlet.ServletRequest; | ||
import javax.servlet.ServletResponse; | ||
import javax.servlet.http.HttpServletRequest; | ||
import javax.servlet.http.HttpServletResponse; | ||
|
||
public class FilterChainWrapper { | ||
public static jakarta.servlet.FilterChain toJakartaFilterChain(FilterChain from) { | ||
Objects.requireNonNull(from); | ||
return new jakarta.servlet.FilterChain() { | ||
@Override | ||
public void doFilter(jakarta.servlet.ServletRequest request, jakarta.servlet.ServletResponse response) | ||
throws IOException, jakarta.servlet.ServletException { | ||
try { | ||
if (request instanceof jakarta.servlet.http.HttpServletRequest | ||
&& response instanceof jakarta.servlet.http.HttpServletResponse) { | ||
jakarta.servlet.http.HttpServletRequest httpRequest = | ||
(jakarta.servlet.http.HttpServletRequest) request; | ||
jakarta.servlet.http.HttpServletResponse httpResponse = | ||
(jakarta.servlet.http.HttpServletResponse) response; | ||
from.doFilter( | ||
HttpServletRequestWrapper.fromJakartaHttpServletRequest(httpRequest), | ||
HttpServletResponseWrapper.fromJakartaHttpServletResponse(httpResponse)); | ||
} else { | ||
from.doFilter( | ||
ServletRequestWrapper.fromJakartaServletRequest(request), | ||
ServletResponseWrapper.fromJakartaServletResponse(response)); | ||
} | ||
} catch (ServletException e) { | ||
throw ServletExceptionWrapper.toJakartaServletException(e); | ||
} | ||
} | ||
}; | ||
} | ||
|
||
public static FilterChain fromJakartaFilterChain(jakarta.servlet.FilterChain from) { | ||
Objects.requireNonNull(from); | ||
return new FilterChain() { | ||
@Override | ||
public void doFilter(ServletRequest request, ServletResponse response) | ||
throws IOException, ServletException { | ||
try { | ||
if (request instanceof HttpServletRequest && response instanceof HttpServletResponse) { | ||
HttpServletRequest httpRequest = (HttpServletRequest) request; | ||
HttpServletResponse httpResponse = (HttpServletResponse) response; | ||
from.doFilter( | ||
HttpServletRequestWrapper.toJakartaHttpServletRequest(httpRequest), | ||
HttpServletResponseWrapper.toJakartaHttpServletResponse(httpResponse)); | ||
} else { | ||
from.doFilter( | ||
io.jenkins.servlet.ServletRequestWrapper.toJakartaServletRequest(request), | ||
ServletResponseWrapper.toJakartaServletResponse(response)); | ||
} | ||
} catch (jakarta.servlet.ServletException e) { | ||
throw ServletExceptionWrapper.fromJakartaServletException(e); | ||
} | ||
} | ||
}; | ||
} | ||
} |
Oops, something went wrong.