diff --git a/pippo-controller-parent/pippo-controller/pom.xml b/pippo-controller-parent/pippo-controller/pom.xml index 9adb8509..049fb8e7 100644 --- a/pippo-controller-parent/pippo-controller/pom.xml +++ b/pippo-controller-parent/pippo-controller/pom.xml @@ -33,8 +33,8 @@ - javax.servlet - javax.servlet-api + jakarta.servlet + jakarta.servlet-api ${servlet.version} provided diff --git a/pippo-core/pom.xml b/pippo-core/pom.xml index 18189294..874acb38 100644 --- a/pippo-core/pom.xml +++ b/pippo-core/pom.xml @@ -16,8 +16,8 @@ - javax.servlet - javax.servlet-api + jakarta.servlet + jakarta.servlet-api ${servlet.version} provided diff --git a/pippo-core/src/main/java/ro/pippo/core/AbstractWebServer.java b/pippo-core/src/main/java/ro/pippo/core/AbstractWebServer.java index 52ba6e0f..759e8cb2 100644 --- a/pippo-core/src/main/java/ro/pippo/core/AbstractWebServer.java +++ b/pippo-core/src/main/java/ro/pippo/core/AbstractWebServer.java @@ -15,7 +15,7 @@ */ package ro.pippo.core; -import javax.servlet.MultipartConfigElement; +import jakarta.servlet.MultipartConfigElement; import java.util.EventListener; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; diff --git a/pippo-core/src/main/java/ro/pippo/core/Application.java b/pippo-core/src/main/java/ro/pippo/core/Application.java index 052400ab..24cdbdd6 100644 --- a/pippo-core/src/main/java/ro/pippo/core/Application.java +++ b/pippo-core/src/main/java/ro/pippo/core/Application.java @@ -37,7 +37,7 @@ import ro.pippo.core.websocket.WebSocketHandler; import ro.pippo.core.websocket.WebSocketRouter; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; import java.util.ArrayList; import java.util.HashMap; import java.util.List; diff --git a/pippo-core/src/main/java/ro/pippo/core/FileItem.java b/pippo-core/src/main/java/ro/pippo/core/FileItem.java index 84b705e7..1e4dd974 100644 --- a/pippo-core/src/main/java/ro/pippo/core/FileItem.java +++ b/pippo-core/src/main/java/ro/pippo/core/FileItem.java @@ -17,7 +17,7 @@ import ro.pippo.core.util.IoUtils; -import javax.servlet.http.Part; +import jakarta.servlet.http.Part; import java.io.File; import java.io.IOException; import java.io.InputStream; diff --git a/pippo-core/src/main/java/ro/pippo/core/Languages.java b/pippo-core/src/main/java/ro/pippo/core/Languages.java index cd206052..34e5e7d2 100644 --- a/pippo-core/src/main/java/ro/pippo/core/Languages.java +++ b/pippo-core/src/main/java/ro/pippo/core/Languages.java @@ -20,7 +20,7 @@ import ro.pippo.core.route.RouteContext; import ro.pippo.core.util.StringUtils; -import javax.servlet.http.Cookie; +import jakarta.servlet.http.Cookie; import java.util.List; import java.util.Locale; import java.util.Map; diff --git a/pippo-core/src/main/java/ro/pippo/core/PippoFilter.java b/pippo-core/src/main/java/ro/pippo/core/PippoFilter.java index db5ed6df..ae10eb58 100644 --- a/pippo-core/src/main/java/ro/pippo/core/PippoFilter.java +++ b/pippo-core/src/main/java/ro/pippo/core/PippoFilter.java @@ -21,16 +21,16 @@ import ro.pippo.core.util.PippoUtils; import ro.pippo.core.util.StringUtils; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.FilterRegistration; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.FilterRegistration; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URI; import java.util.Collection; diff --git a/pippo-core/src/main/java/ro/pippo/core/PippoServlet.java b/pippo-core/src/main/java/ro/pippo/core/PippoServlet.java index f1c99ae5..acbdc6c0 100644 --- a/pippo-core/src/main/java/ro/pippo/core/PippoServlet.java +++ b/pippo-core/src/main/java/ro/pippo/core/PippoServlet.java @@ -21,14 +21,14 @@ import ro.pippo.core.util.PippoUtils; import ro.pippo.core.util.StringUtils; -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URI; diff --git a/pippo-core/src/main/java/ro/pippo/core/PippoServletContextListener.java b/pippo-core/src/main/java/ro/pippo/core/PippoServletContextListener.java index 4e88059d..3cd49c0d 100644 --- a/pippo-core/src/main/java/ro/pippo/core/PippoServletContextListener.java +++ b/pippo-core/src/main/java/ro/pippo/core/PippoServletContextListener.java @@ -19,8 +19,8 @@ import org.slf4j.LoggerFactory; import ro.pippo.core.util.ServiceLocator; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.ServletContextListener; import java.util.List; /** diff --git a/pippo-core/src/main/java/ro/pippo/core/Request.java b/pippo-core/src/main/java/ro/pippo/core/Request.java index daa7514b..4db548a8 100644 --- a/pippo-core/src/main/java/ro/pippo/core/Request.java +++ b/pippo-core/src/main/java/ro/pippo/core/Request.java @@ -24,10 +24,10 @@ import ro.pippo.core.util.IoUtils; import ro.pippo.core.util.StringUtils; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; -import javax.servlet.http.Part; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; +import jakarta.servlet.http.Part; import java.net.URI; import java.util.Collection; import java.util.Collections; diff --git a/pippo-core/src/main/java/ro/pippo/core/RequestResponseFactory.java b/pippo-core/src/main/java/ro/pippo/core/RequestResponseFactory.java index 80ca8f30..82ac71e4 100644 --- a/pippo-core/src/main/java/ro/pippo/core/RequestResponseFactory.java +++ b/pippo-core/src/main/java/ro/pippo/core/RequestResponseFactory.java @@ -15,8 +15,8 @@ */ package ro.pippo.core; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; /** * Helps in creating Request and Response objects. diff --git a/pippo-core/src/main/java/ro/pippo/core/Response.java b/pippo-core/src/main/java/ro/pippo/core/Response.java index 01faf730..fdf57163 100644 --- a/pippo-core/src/main/java/ro/pippo/core/Response.java +++ b/pippo-core/src/main/java/ro/pippo/core/Response.java @@ -25,9 +25,9 @@ import ro.pippo.core.util.MimeTypes; import ro.pippo.core.util.StringUtils; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletResponse; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; diff --git a/pippo-core/src/main/java/ro/pippo/core/Session.java b/pippo-core/src/main/java/ro/pippo/core/Session.java index 819ad4ff..0dcabf81 100644 --- a/pippo-core/src/main/java/ro/pippo/core/Session.java +++ b/pippo-core/src/main/java/ro/pippo/core/Session.java @@ -18,7 +18,7 @@ import ro.pippo.core.route.RouteContext; import ro.pippo.core.route.RouteDispatcher; -import javax.servlet.http.HttpSession; +import jakarta.servlet.http.HttpSession; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; diff --git a/pippo-core/src/main/java/ro/pippo/core/WebServer.java b/pippo-core/src/main/java/ro/pippo/core/WebServer.java index af73af4e..c491337b 100644 --- a/pippo-core/src/main/java/ro/pippo/core/WebServer.java +++ b/pippo-core/src/main/java/ro/pippo/core/WebServer.java @@ -23,7 +23,7 @@ public interface WebServer { /** - * Attribute name used to retrieve the application instance from a {@link javax.servlet.ServletContext}. + * Attribute name used to retrieve the application instance from a {@link jakarta.servlet.ServletContext}. * See also {@link WebServerInitializer}. * *
@@ -100,15 +100,15 @@ public interface WebServer {
      * Servlet API provides following Listener interfaces:
      *
      * 
    - *
  • {@code javax.servlet.ServletContextListener}
  • - *
  • {@code javax.servlet.ServletContextAttributeListener}
  • - *
  • {@code javax.servlet.ServletRequestListener}
  • - *
  • {@code javax.servlet.ServletRequestAttributeListener}
  • - *
  • {@code javax.servlet.http.HttpSessionListener}
  • - *
  • {@code javax.servlet.http.HttpSessionBindingListener}
  • - *
  • {@code javax.servlet.http.HttpSessionAttributeListener}
  • - *
  • {@code javax.servlet.http.HttpSessionActivationListener}
  • - *
  • {@code javax.servlet.AsyncListener}
  • + *
  • {@link jakarta.servlet.ServletContextListener}
  • + *
  • {@link jakarta.servlet.ServletContextAttributeListener}
  • + *
  • {@link jakarta.servlet.ServletRequestListener}
  • + *
  • {@link jakarta.servlet.ServletRequestAttributeListener}
  • + *
  • {@link jakarta.servlet.http.HttpSessionListener}
  • + *
  • {@link jakarta.servlet.http.HttpSessionBindingListener}
  • + *
  • {@link jakarta.servlet.http.HttpSessionAttributeListener}
  • + *
  • {@link jakarta.servlet.http.HttpSessionActivationListener}
  • + *
  • {@link jakarta.servlet.AsyncListener}
  • *
* * @param listener diff --git a/pippo-core/src/main/java/ro/pippo/core/WebServerInitializer.java b/pippo-core/src/main/java/ro/pippo/core/WebServerInitializer.java index 8074c3f4..99b3a8e4 100644 --- a/pippo-core/src/main/java/ro/pippo/core/WebServerInitializer.java +++ b/pippo-core/src/main/java/ro/pippo/core/WebServerInitializer.java @@ -15,7 +15,7 @@ */ package ro.pippo.core; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; /** * Interface to be implemented in Servlet 3.0+ environments in order to configure the diff --git a/pippo-core/src/main/java/ro/pippo/core/gzip/GZipFilter.java b/pippo-core/src/main/java/ro/pippo/core/gzip/GZipFilter.java index ce9a5514..4ce30fa5 100644 --- a/pippo-core/src/main/java/ro/pippo/core/gzip/GZipFilter.java +++ b/pippo-core/src/main/java/ro/pippo/core/gzip/GZipFilter.java @@ -17,14 +17,14 @@ import ro.pippo.core.util.StringUtils; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; /** diff --git a/pippo-core/src/main/java/ro/pippo/core/gzip/GZipRequestResponseFactory.java b/pippo-core/src/main/java/ro/pippo/core/gzip/GZipRequestResponseFactory.java index 93dc960a..66689d31 100644 --- a/pippo-core/src/main/java/ro/pippo/core/gzip/GZipRequestResponseFactory.java +++ b/pippo-core/src/main/java/ro/pippo/core/gzip/GZipRequestResponseFactory.java @@ -22,8 +22,8 @@ import ro.pippo.core.Response; import ro.pippo.core.util.StringUtils; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; /** * @author Decebal Suiu diff --git a/pippo-core/src/main/java/ro/pippo/core/gzip/GZipResponseStream.java b/pippo-core/src/main/java/ro/pippo/core/gzip/GZipResponseStream.java index 1216f511..bbfa5209 100644 --- a/pippo-core/src/main/java/ro/pippo/core/gzip/GZipResponseStream.java +++ b/pippo-core/src/main/java/ro/pippo/core/gzip/GZipResponseStream.java @@ -15,8 +15,9 @@ */ package ro.pippo.core.gzip; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.WriteListener; +import jakarta.servlet.http.HttpServletResponse; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.zip.GZIPOutputStream; @@ -94,4 +95,15 @@ public void write(byte[] b, int off, int len) throws IOException { gzipOutputStream.write(b, off, len); } + @Override + public boolean isReady() { + // we are writing to internal buffer, so we are always ready + return true; + } + + @Override + public void setWriteListener(WriteListener writeListener) { + // we are always ready, ignore + } + } diff --git a/pippo-core/src/main/java/ro/pippo/core/gzip/GZipResponseWrapper.java b/pippo-core/src/main/java/ro/pippo/core/gzip/GZipResponseWrapper.java index 93c84b24..550c702d 100644 --- a/pippo-core/src/main/java/ro/pippo/core/gzip/GZipResponseWrapper.java +++ b/pippo-core/src/main/java/ro/pippo/core/gzip/GZipResponseWrapper.java @@ -17,9 +17,9 @@ import ro.pippo.core.util.IoUtils; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpServletResponseWrapper; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponseWrapper; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter; diff --git a/pippo-core/src/main/java/ro/pippo/core/route/CSRFHandler.java b/pippo-core/src/main/java/ro/pippo/core/route/CSRFHandler.java index c737afe5..5f979959 100644 --- a/pippo-core/src/main/java/ro/pippo/core/route/CSRFHandler.java +++ b/pippo-core/src/main/java/ro/pippo/core/route/CSRFHandler.java @@ -23,7 +23,7 @@ import ro.pippo.core.util.CryptoUtils; import ro.pippo.core.util.StringUtils; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponse; import java.util.Arrays; import java.util.List; diff --git a/pippo-core/src/main/java/ro/pippo/core/route/RouteDispatcher.java b/pippo-core/src/main/java/ro/pippo/core/route/RouteDispatcher.java index 285048d3..83377286 100644 --- a/pippo-core/src/main/java/ro/pippo/core/route/RouteDispatcher.java +++ b/pippo-core/src/main/java/ro/pippo/core/route/RouteDispatcher.java @@ -25,8 +25,8 @@ import ro.pippo.core.Response; import ro.pippo.core.util.ServiceLocator; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Collections; import java.util.List; diff --git a/pippo-core/src/main/java/ro/pippo/core/util/CookieUtils.java b/pippo-core/src/main/java/ro/pippo/core/util/CookieUtils.java index a967b2b6..8baab34c 100644 --- a/pippo-core/src/main/java/ro/pippo/core/util/CookieUtils.java +++ b/pippo-core/src/main/java/ro/pippo/core/util/CookieUtils.java @@ -15,8 +15,8 @@ */ package ro.pippo.core.util; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; import java.util.Arrays; import java.util.Collections; import java.util.List; diff --git a/pippo-core/src/main/java/ro/pippo/core/websocket/AbstractWebSocketFilter.java b/pippo-core/src/main/java/ro/pippo/core/websocket/AbstractWebSocketFilter.java index e3411d3b..fe6d3abc 100644 --- a/pippo-core/src/main/java/ro/pippo/core/websocket/AbstractWebSocketFilter.java +++ b/pippo-core/src/main/java/ro/pippo/core/websocket/AbstractWebSocketFilter.java @@ -20,7 +20,7 @@ import ro.pippo.core.Response; import ro.pippo.core.util.StringUtils; -import javax.servlet.ServletException; +import jakarta.servlet.ServletException; import java.io.IOException; import java.util.ArrayList; import java.util.Enumeration; @@ -50,7 +50,7 @@ protected boolean acceptWebSocket(Request request, Response response) return false; } - if (!headerContainsToken(request, "Sec-websocket-version", "13")) { + if (!headerContainsToken(request, "Sec-WebSocket-Version", "13")) { response.badRequest().header("Sec-WebSocket-Version", "13"); // http://tools.ietf.org/html/rfc6455#section-4.4 return false; } diff --git a/pippo-core/src/main/java/ro/pippo/core/websocket/WebSocketConnection.java b/pippo-core/src/main/java/ro/pippo/core/websocket/WebSocketConnection.java index 1aea811c..fafbbc4d 100644 --- a/pippo-core/src/main/java/ro/pippo/core/websocket/WebSocketConnection.java +++ b/pippo-core/src/main/java/ro/pippo/core/websocket/WebSocketConnection.java @@ -16,7 +16,7 @@ package ro.pippo.core.websocket; import java.io.IOException; -import java.net.InetSocketAddress; +import java.net.SocketAddress; /** * @author Decebal Suiu @@ -49,6 +49,6 @@ public interface WebSocketConnection { */ WebSocketConnection sendMessage(byte[] message) throws IOException; - InetSocketAddress getRemoteAddress(); + SocketAddress getRemoteAddress(); } diff --git a/pippo-core/src/test/java/ro/pippo/core/RequestTest.java b/pippo-core/src/test/java/ro/pippo/core/RequestTest.java index d4ece8b4..15698412 100644 --- a/pippo-core/src/test/java/ro/pippo/core/RequestTest.java +++ b/pippo-core/src/test/java/ro/pippo/core/RequestTest.java @@ -17,7 +17,7 @@ import org.junit.jupiter.api.Test; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import java.util.Collections; import static org.junit.jupiter.api.Assertions.assertEquals; diff --git a/pippo-core/src/test/java/ro/pippo/core/ResponseTest.java b/pippo-core/src/test/java/ro/pippo/core/ResponseTest.java index 5823064a..3a6d1498 100644 --- a/pippo-core/src/test/java/ro/pippo/core/ResponseTest.java +++ b/pippo-core/src/test/java/ro/pippo/core/ResponseTest.java @@ -17,7 +17,7 @@ import org.junit.jupiter.api.Test; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponse; import java.nio.charset.StandardCharsets; import static org.junit.jupiter.api.Assertions.assertEquals; diff --git a/pippo-core/src/test/java/ro/pippo/core/gzip/GZipRequestResponseFactoryTest.java b/pippo-core/src/test/java/ro/pippo/core/gzip/GZipRequestResponseFactoryTest.java index 58d5d694..06abc8f6 100644 --- a/pippo-core/src/test/java/ro/pippo/core/gzip/GZipRequestResponseFactoryTest.java +++ b/pippo-core/src/test/java/ro/pippo/core/gzip/GZipRequestResponseFactoryTest.java @@ -19,7 +19,7 @@ import org.mockito.Mockito; import ro.pippo.core.Application; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; diff --git a/pippo-core/src/test/java/ro/pippo/core/route/CorsHandlerTest.java b/pippo-core/src/test/java/ro/pippo/core/route/CorsHandlerTest.java index 91e754c8..3abd95b1 100644 --- a/pippo-core/src/test/java/ro/pippo/core/route/CorsHandlerTest.java +++ b/pippo-core/src/test/java/ro/pippo/core/route/CorsHandlerTest.java @@ -22,7 +22,7 @@ import ro.pippo.core.PippoRuntimeException; import ro.pippo.core.Response; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponse; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; diff --git a/pippo-metrics-parent/pippo-metrics/pom.xml b/pippo-metrics-parent/pippo-metrics/pom.xml index 918f5661..656b6cbb 100644 --- a/pippo-metrics-parent/pippo-metrics/pom.xml +++ b/pippo-metrics-parent/pippo-metrics/pom.xml @@ -53,8 +53,8 @@ - javax.servlet - javax.servlet-api + jakarta.servlet + jakarta.servlet-api ${servlet.version} provided diff --git a/pippo-security-parent/pippo-pac4j/pom.xml b/pippo-security-parent/pippo-pac4j/pom.xml index f86856de..702c85b3 100644 --- a/pippo-security-parent/pippo-pac4j/pom.xml +++ b/pippo-security-parent/pippo-pac4j/pom.xml @@ -19,8 +19,8 @@ - javax.servlet - javax.servlet-api + jakarta.servlet + jakarta.servlet-api ${servlet.version} provided diff --git a/pippo-security-parent/pippo-pac4j/src/main/java/ro/pippo/pac4j/PippoWebContext.java b/pippo-security-parent/pippo-pac4j/src/main/java/ro/pippo/pac4j/PippoWebContext.java index 132a3e42..c480f9f4 100644 --- a/pippo-security-parent/pippo-pac4j/src/main/java/ro/pippo/pac4j/PippoWebContext.java +++ b/pippo-security-parent/pippo-pac4j/src/main/java/ro/pippo/pac4j/PippoWebContext.java @@ -171,7 +171,7 @@ public void addResponseCookie(Cookie cookie) { cookie.isSecure() ); - javax.servlet.http.Cookie addedCookie = getResponse().getCookie(cookie.getName()); + jakarta.servlet.http.Cookie addedCookie = getResponse().getCookie(cookie.getName()); addedCookie.setHttpOnly(cookie.isHttpOnly()); addedCookie.setComment(cookie.getComment()); } diff --git a/pippo-security-parent/pippo-pac4j/src/test/java/ro/pippo/pac4j/PippoWebContextTest.java b/pippo-security-parent/pippo-pac4j/src/test/java/ro/pippo/pac4j/PippoWebContextTest.java index e781891d..aafd8325 100644 --- a/pippo-security-parent/pippo-pac4j/src/test/java/ro/pippo/pac4j/PippoWebContextTest.java +++ b/pippo-security-parent/pippo-pac4j/src/test/java/ro/pippo/pac4j/PippoWebContextTest.java @@ -34,8 +34,8 @@ import ro.pippo.core.route.RouteContext; import ro.pippo.core.route.Router; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.util.Arrays; import java.util.Collection; import java.util.Collections; @@ -314,8 +314,8 @@ public void shouldReturnRouteContext() { public void shouldReturnAllCookiesFromUnderlyingRequest() { int authCookieExpiry = 604800000; - javax.servlet.http.Cookie testCookie = new javax.servlet.http.Cookie("test", "talk"); - javax.servlet.http.Cookie authCookie = new javax.servlet.http.Cookie("sid", "DEADBEEF"); + jakarta.servlet.http.Cookie testCookie = new jakarta.servlet.http.Cookie("test", "talk"); + jakarta.servlet.http.Cookie authCookie = new jakarta.servlet.http.Cookie("sid", "DEADBEEF"); authCookie.setDomain("foo.example.com"); authCookie.setPath(DEFAULT_APPLICATION_PATH); authCookie.setComment("auth cookie"); @@ -324,7 +324,7 @@ public void shouldReturnAllCookiesFromUnderlyingRequest() { authCookie.setMaxAge(authCookieExpiry); when(mockHttpRequest.getCookies()) - .thenReturn(new javax.servlet.http.Cookie[] { testCookie, authCookie }); + .thenReturn(new jakarta.servlet.http.Cookie[] { testCookie, authCookie }); PippoWebContext context = makePippoWebContext(); @@ -351,7 +351,7 @@ public void shouldReturnAllCookiesFromUnderlyingRequest() { @Test public void shouldReturnEmptyCollectionIfNoCookiesInUnderlyingRequest() { when(mockHttpRequest.getCookies()) - .thenReturn(new javax.servlet.http.Cookie[0]); + .thenReturn(new jakarta.servlet.http.Cookie[0]); PippoWebContext context = makePippoWebContext(); @@ -374,14 +374,14 @@ public void shouldAddSpecifiedCookieToUnderlyingResponse() { makePippoWebContext().addResponseCookie(cookieToAdd); - ArgumentCaptor cookieArgumentCaptor - = ArgumentCaptor.forClass(javax.servlet.http.Cookie.class); + ArgumentCaptor cookieArgumentCaptor + = ArgumentCaptor.forClass(jakarta.servlet.http.Cookie.class); response.commit(); verify(mockHttpResponse, times(1)).addCookie(cookieArgumentCaptor.capture()); - javax.servlet.http.Cookie cookieAdded = cookieArgumentCaptor.getValue(); + jakarta.servlet.http.Cookie cookieAdded = cookieArgumentCaptor.getValue(); assertThat(cookieAdded.getName(), is(cookieToAdd.getName())); assertThat(cookieAdded.getValue(), is(cookieToAdd.getValue())); diff --git a/pippo-server-parent/pippo-jetty/pom.xml b/pippo-server-parent/pippo-jetty/pom.xml index 54561428..36d44702 100644 --- a/pippo-server-parent/pippo-jetty/pom.xml +++ b/pippo-server-parent/pippo-jetty/pom.xml @@ -15,7 +15,7 @@ Jetty embedded server - 9.4.44.v20210927 + 11.0.13 @@ -45,7 +45,7 @@ org.eclipse.jetty.websocket - websocket-server + websocket-jetty-server ${jetty.version} @@ -54,6 +54,20 @@ metainf-services provided + + + ro.pippo + pippo-test + ${project.version} + test + + + + org.eclipse.jetty.websocket + websocket-jetty-client + ${jetty.version} + test + diff --git a/pippo-server-parent/pippo-jetty/src/main/java/ro/pippo/jetty/JettyServer.java b/pippo-server-parent/pippo-jetty/src/main/java/ro/pippo/jetty/JettyServer.java index 4b57dcc2..4973dec9 100644 --- a/pippo-server-parent/pippo-jetty/src/main/java/ro/pippo/jetty/JettyServer.java +++ b/pippo-server-parent/pippo-jetty/src/main/java/ro/pippo/jetty/JettyServer.java @@ -33,11 +33,11 @@ import ro.pippo.core.PippoServletContextListener; import ro.pippo.core.WebServer; -import javax.servlet.DispatcherType; -import javax.servlet.MultipartConfigElement; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.DispatcherType; +import jakarta.servlet.MultipartConfigElement; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; @@ -160,7 +160,7 @@ protected ServerConnector createServerConnector(Server server) { return new ServerConnector(server); } - SslContextFactory sslContextFactory = new SslContextFactory.Server(); + SslContextFactory.Server sslContextFactory = new SslContextFactory.Server(); sslContextFactory.setKeyStorePath(asJettyFriendlyPath(keyStoreFile, "Keystore file")); if (getSettings().getKeystorePassword() != null) { @@ -213,7 +213,7 @@ protected ServletContextHandler createPippoHandler() { protected PippoFilter createPippoFilter() { try { // try to load a class from jetty.websocket - Class.forName("org.eclipse.jetty.websocket.server.WebSocketServerFactory"); + Class.forName("org.eclipse.jetty.websocket.server.JettyWebSocketServerContainer"); } catch (ClassNotFoundException e) { return super.createPippoFilter(); } @@ -221,7 +221,7 @@ protected PippoFilter createPippoFilter() { try { // create an instance of JettyWebSocketFilter Class pippoFilterClass = Class.forName("ro.pippo.jetty.websocket.JettyWebSocketFilter"); - return (PippoFilter) pippoFilterClass.getDeclaredConstructor().newInstance(); + return (PippoFilter) pippoFilterClass.getDeclaredConstructor(Server.class).newInstance(server); } catch (Exception e) { throw new PippoRuntimeException(e); } @@ -257,7 +257,7 @@ public void doHandle(String target, Request baseRequest, HttpServletRequest requ throws IOException, ServletException { if (isMultipartRequest(request)) { - baseRequest.setAttribute(Request.MULTIPART_CONFIG_ELEMENT, multipartConfig); + baseRequest.setAttribute(Request.__MULTIPART_CONFIG_ELEMENT, multipartConfig); } super.doHandle(target, baseRequest, request, response); diff --git a/pippo-server-parent/pippo-jetty/src/main/java/ro/pippo/jetty/websocket/JettyWebSocketConnection.java b/pippo-server-parent/pippo-jetty/src/main/java/ro/pippo/jetty/websocket/JettyWebSocketConnection.java index c83dce38..f58229bd 100644 --- a/pippo-server-parent/pippo-jetty/src/main/java/ro/pippo/jetty/websocket/JettyWebSocketConnection.java +++ b/pippo-server-parent/pippo-jetty/src/main/java/ro/pippo/jetty/websocket/JettyWebSocketConnection.java @@ -19,7 +19,7 @@ import ro.pippo.core.websocket.WebSocketConnection; import java.io.IOException; -import java.net.InetSocketAddress; +import java.net.SocketAddress; import java.nio.ByteBuffer; /** @@ -63,7 +63,7 @@ public WebSocketConnection sendMessage(byte[] message) throws IOException { } @Override - public InetSocketAddress getRemoteAddress() { + public SocketAddress getRemoteAddress() { return session.getRemoteAddress(); } diff --git a/pippo-server-parent/pippo-jetty/src/main/java/ro/pippo/jetty/websocket/JettyWebSocketFilter.java b/pippo-server-parent/pippo-jetty/src/main/java/ro/pippo/jetty/websocket/JettyWebSocketFilter.java index ba4a7be4..1cb4a2ec 100644 --- a/pippo-server-parent/pippo-jetty/src/main/java/ro/pippo/jetty/websocket/JettyWebSocketFilter.java +++ b/pippo-server-parent/pippo-jetty/src/main/java/ro/pippo/jetty/websocket/JettyWebSocketFilter.java @@ -15,9 +15,11 @@ */ package ro.pippo.jetty.websocket; -import org.eclipse.jetty.websocket.api.WebSocketPolicy; -import org.eclipse.jetty.websocket.server.WebSocketServerFactory; -import org.eclipse.jetty.websocket.servlet.ServletUpgradeRequest; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.websocket.core.server.WebSocketServerComponents; +import org.eclipse.jetty.websocket.server.JettyServerUpgradeRequest; +import org.eclipse.jetty.websocket.server.JettyWebSocketCreator; +import org.eclipse.jetty.websocket.server.JettyWebSocketServerContainer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ro.pippo.core.Request; @@ -25,9 +27,11 @@ import ro.pippo.core.websocket.AbstractWebSocketFilter; import ro.pippo.core.websocket.WebSocketRouter; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; + import java.io.IOException; +import java.time.Duration; /** * @author Decebal Suiu @@ -36,33 +40,40 @@ public class JettyWebSocketFilter extends AbstractWebSocketFilter { private static final Logger log = LoggerFactory.getLogger(JettyWebSocketFilter.class); - private WebSocketServerFactory webSocketFactory; + private final Server server; + private JettyWebSocketServerContainer serverContainer; + private JettyWebSocketCreator creator; + + public JettyWebSocketFilter(Server server) { + this.server = server; + } @Override public void init(FilterConfig filterConfig) throws ServletException { super.init(filterConfig); try { - WebSocketPolicy serverPolicy = WebSocketPolicy.newServerPolicy(); + WebSocketServerComponents.ensureWebSocketComponents(server, filterConfig.getServletContext()); + serverContainer = JettyWebSocketServerContainer.ensureContainer(filterConfig.getServletContext()); String inputBufferSize = filterConfig.getInitParameter("inputBufferSize"); if (inputBufferSize != null) { - serverPolicy.setInputBufferSize(Integer.parseInt(inputBufferSize)); + serverContainer.setInputBufferSize(Integer.parseInt(inputBufferSize)); } String idleTimeout = filterConfig.getInitParameter("idleTimeout"); if (idleTimeout != null) { - serverPolicy.setIdleTimeout(Integer.parseInt(idleTimeout)); + serverContainer.setIdleTimeout(Duration.ofMillis(Long.parseLong(idleTimeout))); } String maxTextMessageSize = filterConfig.getInitParameter("maxTextMessageSize"); if (maxTextMessageSize != null) { - serverPolicy.setMaxTextMessageSize(Integer.parseInt(maxTextMessageSize)); + serverContainer.setMaxTextMessageSize(Integer.parseInt(maxTextMessageSize)); } - webSocketFactory = new WebSocketServerFactory(filterConfig.getServletContext(), serverPolicy); - webSocketFactory.setCreator((request, response) -> createWebSocketAdapter(request)); - webSocketFactory.start(); + creator = (request, response) -> createWebSocketAdapter(request); + + serverContainer.start(); } catch (ServletException e) { throw e; } catch (Exception e) { @@ -72,9 +83,9 @@ public void init(FilterConfig filterConfig) throws ServletException { @Override public void destroy() { - if (webSocketFactory != null) { + if (serverContainer != null) { try { - webSocketFactory.stop(); + serverContainer.stop(); } catch (Exception e) { log.warn("A problem occurred while stopping the web socket factory", e); } @@ -85,13 +96,11 @@ public void destroy() { @Override protected boolean acceptWebSocket(Request request, Response response) throws IOException, ServletException { - return super.acceptWebSocket(request, response) && webSocketFactory - .acceptWebSocket(request.getHttpServletRequest(), response.getHttpServletResponse()); + return super.acceptWebSocket(request, response) && serverContainer.upgrade(creator, request.getHttpServletRequest(), response.getHttpServletResponse()); } - protected JettyWebSocketAdapter createWebSocketAdapter(ServletUpgradeRequest request) { + protected JettyWebSocketAdapter createWebSocketAdapter(JettyServerUpgradeRequest request) { WebSocketRouter.WebSocketMatch match = findWebSocketRoute(request.getRequestPath()); - return new JettyWebSocketAdapter(match.getHandler(), match.getPathParameters()); } diff --git a/pippo-server-parent/pippo-jetty/src/test/java/ro/pippo/jetty/JettyServerTest.java b/pippo-server-parent/pippo-jetty/src/test/java/ro/pippo/jetty/JettyServerTest.java new file mode 100644 index 00000000..f4a596c8 --- /dev/null +++ b/pippo-server-parent/pippo-jetty/src/test/java/ro/pippo/jetty/JettyServerTest.java @@ -0,0 +1,110 @@ +/* + * Copyright (C) 2015-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package ro.pippo.jetty; + +import org.eclipse.jetty.websocket.api.Session; +import org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage; +import org.eclipse.jetty.websocket.api.annotations.WebSocket; +import org.hamcrest.Matchers; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; +import ro.pippo.core.Application; +import ro.pippo.core.websocket.WebSocketContext; +import ro.pippo.core.websocket.WebSocketHandler; +import ro.pippo.test.PippoTest; +import ro.pippo.test.PippoWebSocketExtension; + +import java.io.IOException; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.LinkedBlockingQueue; + +public class JettyServerTest extends PippoTest { + + @RegisterExtension + public static PippoWebSocketExtension pippoExtension = new PippoWebSocketExtension(new Application() {{ + + GET("/foo", context -> context.send("foo")); + + addWebSocket("/ws/echo", new WebSocketHandler() { + @Override + public void onMessage(WebSocketContext context, String message) { + try { + context.getConnection().sendMessage(message); + } catch (IOException e) { + throw new RuntimeException("Unable to echo message", e); + } + } + @Override + public void onMessage(WebSocketContext context, byte[] message) { + try { + context.getConnection().sendMessage(message); + } catch (IOException e) { + throw new RuntimeException("Unable to echo message", e); + } + } + }); + + }}); + + @Test + public void testPlainTextGet() { + when() + .get("/foo") + .then() + .statusCode(200) + .body(Matchers.containsString("foo")) + ; + } + + @Test + public void testWsText() throws IOException, ExecutionException, InterruptedException { + BlockingQueue incoming = new LinkedBlockingQueue<>(); + + WsEchoEndpoint clientEndPoint = new WsEchoEndpoint(incoming); + + CompletableFuture clientSessionPromise = pippoExtension.wsConnect(clientEndPoint, "/ws/echo"); + + try (Session session = clientSessionPromise.get()) { + String message = "ping"; + + session.getRemote().sendString(message); + + String response = incoming.take(); + Assertions.assertEquals(response, message); + } + } + + @WebSocket + @SuppressWarnings("InnerClassMayBeStatic") + public class WsEchoEndpoint { + + private final BlockingQueue queue; + + public WsEchoEndpoint(BlockingQueue queue) { + this.queue = queue; + } + + @OnWebSocketMessage + public void onText(@SuppressWarnings("unused") Session session, String message) throws InterruptedException { + queue.put(message); + } + + } + +} diff --git a/pippo-server-parent/pippo-tomcat/pom.xml b/pippo-server-parent/pippo-tomcat/pom.xml index df5debb0..67a38a2a 100644 --- a/pippo-server-parent/pippo-tomcat/pom.xml +++ b/pippo-server-parent/pippo-tomcat/pom.xml @@ -14,7 +14,7 @@ Tomcat Embedded Web Server - 8.5.61 + 10.0.27 diff --git a/pippo-server-parent/pippo-tomcat/src/main/java/ro/pippo/tomcat/TomcatServer.java b/pippo-server-parent/pippo-tomcat/src/main/java/ro/pippo/tomcat/TomcatServer.java index ab582a95..28de6df1 100644 --- a/pippo-server-parent/pippo-tomcat/src/main/java/ro/pippo/tomcat/TomcatServer.java +++ b/pippo-server-parent/pippo-tomcat/src/main/java/ro/pippo/tomcat/TomcatServer.java @@ -70,8 +70,8 @@ public void start() { wrapper.setLoadOnStartup(1); wrapper.setServlet(pippoServlet); wrapper.setMultipartConfigElement(createMultipartConfigElement()); + wrapper.addMapping(pippoFilterPath); context.addChild(wrapper); - context.addServletMapping(pippoFilterPath, name); // inject application as context attribute context.getServletContext().setAttribute(PIPPO_APPLICATION, getApplication()); @@ -128,20 +128,19 @@ private void enableSSLConnector(Tomcat tomcat) { connector.setPort(getSettings().getPort()); connector.setSecure(true); connector.setScheme("https"); - connector.setAttribute("keyAlias", getSettings().getKeyAlias()); - connector.setAttribute("keystorePass", getSettings().getKeystorePassword()); - connector.setAttribute("keystoreType", getSettings().getKeyType()); - connector.setAttribute("keystoreFile", getSettings().getKeystoreFile()); - connector.setAttribute("clientAuth", getSettings().getClientAuth()); + connector.setProperty("keyAlias", getSettings().getKeyAlias()); + connector.setProperty("keystorePass", getSettings().getKeystorePassword()); + connector.setProperty("keystoreType", getSettings().getKeyType()); + connector.setProperty("keystoreFile", getSettings().getKeystoreFile()); + connector.setProperty("clientAuth", getSettings().getClientAuth() ? "required" : "none"); if (getSettings().getClientAuth()) { - connector.setAttribute("truststoreFile", getSettings().getTruststoreFile()); - connector.setAttribute("truststorePass", getSettings().getTruststorePassword()); + connector.setProperty("truststoreFile", getSettings().getTruststoreFile()); + connector.setProperty("truststorePassword", getSettings().getTruststorePassword()); } - connector.setAttribute("protocol", "HTTP/1.1"); - connector.setAttribute("sslProtocol", "TLS"); - connector.setAttribute("maxThreads", getSettings().getMaxConnections()); - connector.setAttribute("protocol", "org.apache.coyote.http11.Http11AprProtocol"); - connector.setAttribute("SSLEnabled", true); + connector.setProperty("protocol", "HTTP/1.1"); + connector.setProperty("sslProtocol", "TLS"); + connector.setProperty("maxThreads", String.valueOf(getSettings().getMaxConnections())); + connector.setProperty("SSLEnabled", "true"); } } diff --git a/pippo-server-parent/pippo-undertow/pom.xml b/pippo-server-parent/pippo-undertow/pom.xml index 2fda4f39..cc164b84 100644 --- a/pippo-server-parent/pippo-undertow/pom.xml +++ b/pippo-server-parent/pippo-undertow/pom.xml @@ -15,7 +15,7 @@ Undertow embedded server - 1.4.27.Final + 2.2.20.Final @@ -27,7 +27,7 @@ io.undertow - undertow-servlet + undertow-servlet-jakarta ${undertow.version} diff --git a/pippo-server-parent/pippo-undertow/src/main/java/ro/pippo/undertow/UndertowServer.java b/pippo-server-parent/pippo-undertow/src/main/java/ro/pippo/undertow/UndertowServer.java index 55e64732..51a2901e 100644 --- a/pippo-server-parent/pippo-undertow/src/main/java/ro/pippo/undertow/UndertowServer.java +++ b/pippo-server-parent/pippo-undertow/src/main/java/ro/pippo/undertow/UndertowServer.java @@ -45,8 +45,8 @@ import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.TrustManagerFactory; -import javax.servlet.DispatcherType; -import javax.servlet.MultipartConfigElement; +import jakarta.servlet.DispatcherType; +import jakarta.servlet.MultipartConfigElement; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; diff --git a/pippo-server-parent/pippo-undertow/src/main/java/ro/pippo/undertow/websocket/UndertowWebSocketConnection.java b/pippo-server-parent/pippo-undertow/src/main/java/ro/pippo/undertow/websocket/UndertowWebSocketConnection.java index b3422573..9af58a38 100644 --- a/pippo-server-parent/pippo-undertow/src/main/java/ro/pippo/undertow/websocket/UndertowWebSocketConnection.java +++ b/pippo-server-parent/pippo-undertow/src/main/java/ro/pippo/undertow/websocket/UndertowWebSocketConnection.java @@ -18,11 +18,10 @@ import io.undertow.websockets.core.WebSocketChannel; import io.undertow.websockets.core.WebSockets; import io.undertow.websockets.spi.WebSocketHttpExchange; -import ro.pippo.core.PippoRuntimeException; import ro.pippo.core.websocket.WebSocketConnection; import java.io.IOException; -import java.net.InetSocketAddress; +import java.net.SocketAddress; import java.nio.ByteBuffer; /** @@ -66,7 +65,7 @@ public WebSocketConnection sendMessage(byte[] message) throws IOException { } @Override - public InetSocketAddress getRemoteAddress() { + public SocketAddress getRemoteAddress() { return channel.getSourceAddress(); } diff --git a/pippo-server-parent/pippo-undertow/src/main/java/ro/pippo/undertow/websocket/UndertowWebSocketFilter.java b/pippo-server-parent/pippo-undertow/src/main/java/ro/pippo/undertow/websocket/UndertowWebSocketFilter.java index 45621309..ec9f5de1 100644 --- a/pippo-server-parent/pippo-undertow/src/main/java/ro/pippo/undertow/websocket/UndertowWebSocketFilter.java +++ b/pippo-server-parent/pippo-undertow/src/main/java/ro/pippo/undertow/websocket/UndertowWebSocketFilter.java @@ -28,10 +28,10 @@ import ro.pippo.core.websocket.AbstractWebSocketFilter; import ro.pippo.core.websocket.WebSocketRouter; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Collections; import java.util.HashSet; diff --git a/pippo-session-parent/pippo-session-cookie/pom.xml b/pippo-session-parent/pippo-session-cookie/pom.xml index 95eb43d9..08476a30 100644 --- a/pippo-session-parent/pippo-session-cookie/pom.xml +++ b/pippo-session-parent/pippo-session-cookie/pom.xml @@ -17,8 +17,8 @@ - javax.servlet - javax.servlet-api + jakarta.servlet + jakarta.servlet-api ${servlet.version} provided diff --git a/pippo-session-parent/pippo-session-cookie/src/main/java/ro/pippo/session/cookie/CookieSessionDataStorage.java b/pippo-session-parent/pippo-session-cookie/src/main/java/ro/pippo/session/cookie/CookieSessionDataStorage.java index f25fdb70..9488962e 100644 --- a/pippo-session-parent/pippo-session-cookie/src/main/java/ro/pippo/session/cookie/CookieSessionDataStorage.java +++ b/pippo-session-parent/pippo-session-cookie/src/main/java/ro/pippo/session/cookie/CookieSessionDataStorage.java @@ -26,9 +26,9 @@ import ro.pippo.session.SessionDataStorage; import ro.pippo.session.SessionDataTranscoder; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; /** * @author Decebal Suiu diff --git a/pippo-session-parent/pippo-session/pom.xml b/pippo-session-parent/pippo-session/pom.xml index 85baf105..002539da 100644 --- a/pippo-session-parent/pippo-session/pom.xml +++ b/pippo-session-parent/pippo-session/pom.xml @@ -17,8 +17,8 @@ - javax.servlet - javax.servlet-api + jakarta.servlet + jakarta.servlet-api ${servlet.version} provided diff --git a/pippo-session-parent/pippo-session/src/main/java/ro/pippo/session/CookieSessionStrategy.java b/pippo-session-parent/pippo-session/src/main/java/ro/pippo/session/CookieSessionStrategy.java index 3d770ddf..492c3e7c 100644 --- a/pippo-session-parent/pippo-session/src/main/java/ro/pippo/session/CookieSessionStrategy.java +++ b/pippo-session-parent/pippo-session/src/main/java/ro/pippo/session/CookieSessionStrategy.java @@ -17,9 +17,9 @@ import ro.pippo.core.util.CookieUtils; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; /** * @author Decebal Suiu diff --git a/pippo-session-parent/pippo-session/src/main/java/ro/pippo/session/PippoHttpSession.java b/pippo-session-parent/pippo-session/src/main/java/ro/pippo/session/PippoHttpSession.java index cc6f40fa..81c972b6 100644 --- a/pippo-session-parent/pippo-session/src/main/java/ro/pippo/session/PippoHttpSession.java +++ b/pippo-session-parent/pippo-session/src/main/java/ro/pippo/session/PippoHttpSession.java @@ -15,9 +15,9 @@ */ package ro.pippo.session; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpSession; -import javax.servlet.http.HttpSessionContext; +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.HttpSession; +import jakarta.servlet.http.HttpSessionContext; import java.util.Collections; import java.util.Enumeration; diff --git a/pippo-session-parent/pippo-session/src/main/java/ro/pippo/session/SessionHttpServletRequest.java b/pippo-session-parent/pippo-session/src/main/java/ro/pippo/session/SessionHttpServletRequest.java index 98aa7894..0e579be0 100644 --- a/pippo-session-parent/pippo-session/src/main/java/ro/pippo/session/SessionHttpServletRequest.java +++ b/pippo-session-parent/pippo-session/src/main/java/ro/pippo/session/SessionHttpServletRequest.java @@ -15,10 +15,10 @@ */ package ro.pippo.session; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpSession; /** * @author Decebal Suiu diff --git a/pippo-session-parent/pippo-session/src/main/java/ro/pippo/session/SessionRequestResponseFactory.java b/pippo-session-parent/pippo-session/src/main/java/ro/pippo/session/SessionRequestResponseFactory.java index 7e5bdaf3..f449b60a 100644 --- a/pippo-session-parent/pippo-session/src/main/java/ro/pippo/session/SessionRequestResponseFactory.java +++ b/pippo-session-parent/pippo-session/src/main/java/ro/pippo/session/SessionRequestResponseFactory.java @@ -21,8 +21,8 @@ import ro.pippo.core.RequestResponseFactory; import ro.pippo.core.Response; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; /** * @author Decebal Suiu diff --git a/pippo-session-parent/pippo-session/src/main/java/ro/pippo/session/SessionStrategy.java b/pippo-session-parent/pippo-session/src/main/java/ro/pippo/session/SessionStrategy.java index 2b67f853..c17330f2 100644 --- a/pippo-session-parent/pippo-session/src/main/java/ro/pippo/session/SessionStrategy.java +++ b/pippo-session-parent/pippo-session/src/main/java/ro/pippo/session/SessionStrategy.java @@ -15,8 +15,8 @@ */ package ro.pippo.session; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; /** * @author Decebal Suiu diff --git a/pippo-test/pom.xml b/pippo-test/pom.xml index 1d3da41c..3d540cc3 100644 --- a/pippo-test/pom.xml +++ b/pippo-test/pom.xml @@ -16,6 +16,7 @@ 5.3.0 + 11.0.13 @@ -33,6 +34,13 @@ compile + + org.eclipse.jetty.websocket + websocket-jetty-client + ${jetty-websocket.version} + true + + org.junit.jupiter junit-jupiter-engine diff --git a/pippo-test/src/main/java/ro/pippo/test/PippoExtension.java b/pippo-test/src/main/java/ro/pippo/test/PippoExtension.java index 6441221f..1f556c04 100644 --- a/pippo-test/src/main/java/ro/pippo/test/PippoExtension.java +++ b/pippo-test/src/main/java/ro/pippo/test/PippoExtension.java @@ -15,14 +15,16 @@ */ package ro.pippo.test; +import org.junit.jupiter.api.extension.AfterAllCallback; +import org.junit.jupiter.api.extension.BeforeAllCallback; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import io.restassured.RestAssured; import io.restassured.config.ObjectMapperConfig; import io.restassured.config.RestAssuredConfig; import io.restassured.mapper.ObjectMapper; import io.restassured.mapper.ObjectMapperDeserializationContext; import io.restassured.mapper.ObjectMapperSerializationContext; -import org.junit.jupiter.api.extension.AfterEachCallback; -import org.junit.jupiter.api.extension.BeforeEachCallback; import org.junit.jupiter.api.extension.ExtensionContext; import ro.pippo.core.Application; import ro.pippo.core.ContentTypeEngine; @@ -34,9 +36,11 @@ * * @author Decebal Suiu */ -public class PippoExtension implements BeforeEachCallback, AfterEachCallback { +public class PippoExtension implements BeforeAllCallback, AfterAllCallback { - private final Pippo pippo; + private static final Logger log = LoggerFactory.getLogger(PippoExtension.class); + + protected final Pippo pippo; public PippoExtension() { this(new Application()); @@ -70,21 +74,29 @@ public Application getApplication() { } public void startPippo() { - pippo.start(); + try { + pippo.start(); + } catch (Exception e) { + throw new RuntimeException("Error starting Pippo", e); + } initRestAssured(); } public void stopPippo() { - pippo.stop(); + try { + pippo.stop(); + } catch (Exception e) { + log.error("Error stopping Pippo", e); + } } @Override - public void beforeEach(ExtensionContext extensionContext) { + public void beforeAll(ExtensionContext extensionContext) { startPippo(); } @Override - public void afterEach(ExtensionContext extensionContext) { + public void afterAll(ExtensionContext extensionContext) { stopPippo(); } diff --git a/pippo-test/src/main/java/ro/pippo/test/PippoWebSocketExtension.java b/pippo-test/src/main/java/ro/pippo/test/PippoWebSocketExtension.java new file mode 100644 index 00000000..d413fc7d --- /dev/null +++ b/pippo-test/src/main/java/ro/pippo/test/PippoWebSocketExtension.java @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2015-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package ro.pippo.test; + +import org.eclipse.jetty.websocket.api.Session; +import org.eclipse.jetty.websocket.client.WebSocketClient; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import ro.pippo.core.Application; +import ro.pippo.core.Pippo; + +import java.io.IOException; +import java.net.URI; +import java.util.concurrent.CompletableFuture; + +public class PippoWebSocketExtension extends PippoExtension { + + private static final Logger log = LoggerFactory.getLogger(PippoWebSocketExtension.class); + + private final WebSocketClient webSocketClient; + + public PippoWebSocketExtension() { + this(new Application()); + } + + public PippoWebSocketExtension(Application application) { + this(application, AvailablePortFinder.findAvailablePort()); + } + + public PippoWebSocketExtension(Application application, Integer port) { + this(new Pippo(application), port); + } + + public PippoWebSocketExtension(Pippo pippo) { + this(pippo, AvailablePortFinder.findAvailablePort()); + } + + public PippoWebSocketExtension(Pippo pippo, Integer port) { + super(pippo, port); + + webSocketClient = new WebSocketClient(); + webSocketClient.setMaxTextMessageSize(8 * 1024); + } + + @Override + public void startPippo() { + super.startPippo(); + + try { + webSocketClient.start(); + } catch (Exception e) { + throw new RuntimeException("Error starting WebSocket client", e); + } + } + + @Override + public void stopPippo() { + try { + webSocketClient.stop(); + } catch (Exception e) { + log.error("Error stopping WebSocket client", e); + } + + super.stopPippo(); + } + + public CompletableFuture wsConnect(Object clientEndPoint, String path) throws IOException { + return webSocketClient.connect(clientEndPoint, URI.create(String.format("ws://%s:%d%s", "localhost", pippo.getServer().getPort(), path))); + } +} diff --git a/pom.xml b/pom.xml index cd6b4446..d7c67c3b 100644 --- a/pom.xml +++ b/pom.xml @@ -48,7 +48,7 @@ 2.3.1 2.3.0.1 - 3.0.1 + 5.0.0 1.7.25 4.0.2