From f845fe4fc7656fc47269160bbac2f5d371c998bc Mon Sep 17 00:00:00 2001 From: Olivier Lamy Date: Sat, 7 Aug 2021 09:24:25 +1000 Subject: [PATCH] [MJAVADOC-687] Upgrade Jetty Version to last 9.4.x (#92) * [MJAVADOC-687] Upgrade Jetty Version to last 9.4.x Signed-off-by: Olivier Lamy --- pom.xml | 30 ++++++-- .../plugins/javadoc/JavadocReportTest.java | 45 ++++++----- .../plugins/javadoc/JavadocUtilTest.java | 43 +++++------ .../maven/plugins/javadoc/ProxyServer.java | 75 ++++++++----------- 4 files changed, 104 insertions(+), 89 deletions(-) diff --git a/pom.xml b/pom.xml index 14eacd70..ac981974 100644 --- a/pom.xml +++ b/pom.xml @@ -73,10 +73,12 @@ under the License. 2.4 1.13.1 1.0.7 + 9.4.43.v20210629 3.3 2.7 2021-05-18T17:44:35Z + 1.7.30 @@ -333,15 +335,27 @@ under the License. test - org.mortbay.jetty - jetty - 6.1.26 + org.eclipse.jetty + jetty-server + ${jetty.version} test - org.mortbay.jetty + org.eclipse.jetty + jetty-proxy + ${jetty.version} + test + + + org.eclipse.jetty + jetty-servlet + ${jetty.version} + test + + + org.eclipse.jetty jetty-client - 6.1.26 + ${jetty.version} test @@ -368,6 +382,11 @@ under the License. 3.19.0 test + + org.slf4j + slf4j-simple + ${slf4j.version} + @@ -445,6 +464,7 @@ under the License. true + false diff --git a/src/test/java/org/apache/maven/plugins/javadoc/JavadocReportTest.java b/src/test/java/org/apache/maven/plugins/javadoc/JavadocReportTest.java index a7f00eb6..23c39983 100644 --- a/src/test/java/org/apache/maven/plugins/javadoc/JavadocReportTest.java +++ b/src/test/java/org/apache/maven/plugins/javadoc/JavadocReportTest.java @@ -63,6 +63,8 @@ import org.hamcrest.MatcherAssert; import org.junit.AssumptionViolatedException; import org.junit.Ignore; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.sonatype.aether.impl.internal.SimpleLocalRepositoryManager; /** @@ -86,6 +88,8 @@ public class JavadocReportTest private File localRepo; + private static final Logger LOGGER = LoggerFactory.getLogger( JavadocReportTest.class ); + /** {@inheritDoc} */ @Override protected void setUp() @@ -259,23 +263,31 @@ public void testDefaultConfiguration() String url = Objects.requireNonNull( mojo.getDefaultJavadocApiLink() ).getUrl(); HttpURLConnection connection = (HttpURLConnection) new URL( url ).openConnection(); connection.setRequestMethod( "HEAD" ); - if ( connection.getResponseCode() == HttpURLConnection.HTTP_OK ) + try { - try - { - assumeThat( connection.getURL().toString(), is( url ) ); - - // https://bugs.openjdk.java.net/browse/JDK-8216497 - MatcherAssert.assertThat( url + " available, but " + appHtml + " is missing link to java.lang.Object", - new String( Files.readAllBytes(generatedFile), StandardCharsets.UTF_8 ), - anyOf( containsString( "/docs/api/java/lang/Object.html" ), - containsString( "/docs/api/java.base/java/lang/Object.html" ) ) ); - } - catch ( AssumptionViolatedException e ) + if ( connection.getResponseCode() == HttpURLConnection.HTTP_OK ) { - System.out.println( "Warning: ignoring defaultAPI check: " + e.getMessage() ); + try + { + assumeThat( connection.getURL().toString(), is( url ) ); + + // https://bugs.openjdk.java.net/browse/JDK-8216497 + MatcherAssert.assertThat( url + " available, but " + appHtml + " is missing link to java.lang.Object", + new String( Files.readAllBytes(generatedFile), StandardCharsets.UTF_8 ), + anyOf( containsString( "/docs/api/java/lang/Object.html" ), + containsString( "/docs/api/java.base/java/lang/Object.html" ) ) ); + } + catch ( AssumptionViolatedException e ) + { + LOGGER.warn( "ignoring defaultAPI check: {}", e.getMessage() ); + } } } + catch (Exception e) + { + LOGGER.error("error connecting to javadoc URL: {}", url); + throw e; + } assertThat( apidocs.resolve( "def/configuration/AppSample.html" )).exists(); assertThat( apidocs.resolve( "def/configuration/package-summary.html" )).exists(); @@ -285,7 +297,7 @@ public void testDefaultConfiguration() // package-frame and allclasses-(no)frame not generated anymore since Java 11 if ( JavaVersion.JAVA_SPECIFICATION_VERSION.isBefore( "11" ) ) { - assertThat( apidocs.resolve( "def/configuration/package-frame.html" )).exists();; + assertThat( apidocs.resolve( "def/configuration/package-frame.html" )).exists(); assertThat( apidocs.resolve( "allclasses-frame.html" )).exists(); assertThat( apidocs.resolve( "allclasses-noframe.html" )).exists(); } @@ -945,11 +957,6 @@ public void testJdk6() public void testProxy() throws Exception { - // ignore test as annotation doesn't ignore anything.. - if ( true ) - { - return; - } Settings settings = new Settings(); Proxy proxy = new Proxy(); diff --git a/src/test/java/org/apache/maven/plugins/javadoc/JavadocUtilTest.java b/src/test/java/org/apache/maven/plugins/javadoc/JavadocUtilTest.java index 8260d66d..3a7c93f1 100644 --- a/src/test/java/org/apache/maven/plugins/javadoc/JavadocUtilTest.java +++ b/src/test/java/org/apache/maven/plugins/javadoc/JavadocUtilTest.java @@ -37,6 +37,7 @@ import java.util.Set; import java.util.regex.PatternSyntaxException; +import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -46,10 +47,12 @@ import org.apache.maven.settings.Settings; import org.codehaus.plexus.PlexusTestCase; import org.codehaus.plexus.util.FileUtils; -import org.mortbay.jetty.Server; -import org.mortbay.jetty.handler.AbstractHandler; -import org.mortbay.jetty.handler.MovedContextHandler; -import org.mortbay.util.ByteArrayISO8859Writer; +import org.eclipse.jetty.server.Request; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.ServerConnector; +import org.eclipse.jetty.server.handler.AbstractHandler; +import org.eclipse.jetty.server.handler.MovedContextHandler; +import org.eclipse.jetty.util.ByteArrayISO8859Writer; import static org.assertj.core.api.Assertions.assertThat; @@ -473,12 +476,11 @@ public void testGetRedirectUrl() try { redirectServer = new Server( 0 ); - redirectServer.addHandler( new AbstractHandler() + redirectServer.setHandler( new AbstractHandler() { @Override - public void handle( String target, HttpServletRequest request, HttpServletResponse response, - int dispatch ) - throws IOException + public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) + throws IOException, ServletException { response.setStatus( HttpServletResponse.SC_OK ); ByteArrayISO8859Writer writer = new ByteArrayISO8859Writer( 100 ); @@ -495,12 +497,12 @@ public void handle( String target, HttpServletRequest request, HttpServletRespon server = new Server( 0 ); MovedContextHandler handler = new MovedContextHandler(); - int redirectPort = redirectServer.getConnectors()[0].getLocalPort(); + int redirectPort = ((ServerConnector)redirectServer.getConnectors()[0]).getLocalPort(); handler.setNewContextURL( "http://localhost:" + redirectPort ); - server.addHandler( handler ); + server.setHandler( handler ); server.start(); - URL url = new URI( "http://localhost:" + server.getConnectors()[0].getLocalPort() ).toURL(); + URL url = new URI( "http://localhost:" + ((ServerConnector)redirectServer.getConnectors()[0]).getLocalPort() ).toURL(); URL redirectUrl = JavadocUtil.getRedirectUrl( url, new Settings() ); assertTrue( redirectUrl.toString().startsWith( "http://localhost:" + redirectPort ) ); @@ -522,12 +524,11 @@ public void testGetRedirectUrlWithNoRedirects() try { server = new Server( 0 ); - server.addHandler( new AbstractHandler() + server.setHandler( new AbstractHandler() { @Override - public void handle( String target, HttpServletRequest request, HttpServletResponse response, - int dispatch ) - throws IOException + public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) + throws IOException, ServletException { response.setStatus( HttpServletResponse.SC_OK ); ByteArrayISO8859Writer writer = new ByteArrayISO8859Writer( 100 ); @@ -542,7 +543,7 @@ public void handle( String target, HttpServletRequest request, HttpServletRespon } ); server.start(); - URL url = new URI( "http://localhost:" + server.getConnectors()[0].getLocalPort() ).toURL(); + URL url = new URI( "http://localhost:" + ((ServerConnector)server.getConnectors()[0]).getLocalPort() ).toURL(); URL redirectUrl = JavadocUtil.getRedirectUrl( url, new Settings() ); assertEquals( url.toURI(), redirectUrl.toURI() ); @@ -564,13 +565,13 @@ public void testGetRedirectUrlVerifyHeaders() try { server = new Server( 0 ); - server.addHandler( new AbstractHandler() + server.setHandler( new AbstractHandler() { @Override - public void handle( String target, HttpServletRequest request, HttpServletResponse response, - int dispatch ) - throws IOException + public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) + throws IOException, ServletException { + if ( request.getHeader( "Accept" ) == null ) { response.setStatus( HttpServletResponse.SC_FORBIDDEN ); @@ -584,7 +585,7 @@ public void handle( String target, HttpServletRequest request, HttpServletRespon } ); server.start(); - URL url = new URI( "http://localhost:" + server.getConnectors()[0].getLocalPort() ).toURL(); + URL url = new URI( "http://localhost:" + ((ServerConnector)server.getConnectors()[0]).getLocalPort() ).toURL(); JavadocUtil.getRedirectUrl( url, new Settings() ); } finally diff --git a/src/test/java/org/apache/maven/plugins/javadoc/ProxyServer.java b/src/test/java/org/apache/maven/plugins/javadoc/ProxyServer.java index 7c1ad2d7..6daa738e 100644 --- a/src/test/java/org/apache/maven/plugins/javadoc/ProxyServer.java +++ b/src/test/java/org/apache/maven/plugins/javadoc/ProxyServer.java @@ -21,7 +21,8 @@ import java.io.IOException; import java.net.InetAddress; -import java.net.UnknownHostException; +import java.nio.charset.StandardCharsets; +import java.util.Base64; import java.util.Map; import javax.servlet.ServletException; @@ -30,13 +31,12 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.mortbay.jetty.Connector; -import org.mortbay.jetty.Server; -import org.mortbay.jetty.bio.SocketConnector; -import org.mortbay.jetty.security.B64Code; -import org.mortbay.jetty.servlet.Context; -import org.mortbay.jetty.servlet.ServletHolder; -import org.mortbay.proxy.AsyncProxyServlet; +import org.eclipse.jetty.proxy.AsyncProxyServlet; +import org.eclipse.jetty.proxy.ConnectHandler; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.ServerConnector; +import org.eclipse.jetty.servlet.ServletContextHandler; +import org.eclipse.jetty.servlet.ServletHolder; /** * A Proxy server. @@ -48,6 +48,8 @@ class ProxyServer { private Server proxyServer; + private ServerConnector serverConnector; + /** * @param proxyServlet the wanted auth proxy servlet */ @@ -63,13 +65,24 @@ public ProxyServer( AuthAsyncProxyServlet proxyServlet ) */ public ProxyServer( String hostName, int port, AuthAsyncProxyServlet proxyServlet ) { - proxyServer = new Server(); + proxyServer = new Server( ); + + serverConnector = new ServerConnector( proxyServer ); + serverConnector.setHost( InetAddress.getLoopbackAddress().getHostName() ); + serverConnector.setReuseAddress( true ); + serverConnector.setPort( 0 ); + + proxyServer.addConnector( serverConnector ); - proxyServer.addConnector( getDefaultConnector( hostName, port ) ); + // Setup proxy handler to handle CONNECT methods + ConnectHandler proxy = new ConnectHandler(); + proxyServer.setHandler(proxy); - Context context = new Context( proxyServer, "/", 0 ); + // Setup proxy servlet + ServletContextHandler context = new ServletContextHandler(proxy, "/", true, false); + ServletHolder appServletHolder = new ServletHolder(proxyServlet); + context.addServlet(appServletHolder, "/*"); - context.addServlet( new ServletHolder( proxyServlet ), "/" ); } /** @@ -77,8 +90,7 @@ public ProxyServer( String hostName, int port, AuthAsyncProxyServlet proxyServle */ public String getHostName() { - Connector connector = proxyServer.getConnectors()[0]; - return connector.getHost(); + return serverConnector.getHost() == null ? InetAddress.getLoopbackAddress().getHostName() : serverConnector.getHost(); } /** @@ -86,8 +98,7 @@ public String getHostName() */ public int getPort() { - Connector connector = proxyServer.getConnectors()[0]; - return ( connector.getLocalPort() <= 0 ? connector.getPort() : connector.getLocalPort() ); + return serverConnector.getLocalPort(); } /** @@ -115,31 +126,6 @@ public void stop() proxyServer = null; } - private Connector getDefaultConnector( String hostName, int port ) - { - Connector connector = new SocketConnector(); - if ( hostName != null ) - { - connector.setHost( hostName ); - } - else - { - try - { - connector.setHost( InetAddress.getLocalHost().getCanonicalHostName() ); - } - catch ( UnknownHostException e ) - { - // nop - } - } - if ( port > 0 ) - { - connector.setPort( port ); - } - - return connector; - } /** * A proxy servlet with authentication support. @@ -180,7 +166,6 @@ public AuthAsyncProxyServlet( Map authentications ) public AuthAsyncProxyServlet( Map authentications, long sleepTime ) { this(); - this.authentications = authentications; this.sleepTime = sleepTime; } @@ -198,8 +183,10 @@ public void service( ServletRequest req, ServletResponse res ) String proxyAuthorization = request.getHeader( "Proxy-Authorization" ); if ( proxyAuthorization != null && proxyAuthorization.startsWith( "Basic " ) ) { - String proxyAuth = proxyAuthorization.substring( 6 ); - String authorization = B64Code.decode( proxyAuth ); + String proxyAuth = proxyAuthorization.substring("Basic ".length()); + String authorization = new String(Base64.getDecoder().decode(proxyAuth), StandardCharsets.UTF_8); + + String[] authTokens = authorization.split( ":" ); String user = authTokens[0]; String password = authTokens[1];