From e179d0fb0168f66e57d21121c287a289e3d94e29 Mon Sep 17 00:00:00 2001 From: Maxim Nesen <maxim.nesen@oracle.com> Date: Fri, 9 Oct 2020 13:08:51 +0200 Subject: [PATCH] Jetty modules handled for JDK less than 11 Signed-off-by: Maxim Nesen <maxim.nesen@oracle.com> --- bom/pom.xml | 48 +++--- connectors/jetty-connector/pom.xml | 138 +++++++++++++++++ .../jetty/connector/JettyConnector.java | 0 .../connector/JettyConnectorProvider.java | 5 + .../connector/JettyHttpClientContract.java | 0 .../connector/JettyHttpClientSupplier.java | 0 .../connector/JettyConnectorProvider.java | 44 ++++++ .../jetty/connector/localization.properties | 3 +- connectors/pom.xml | 10 +- containers/jetty-http/pom.xml | 143 ++++++++++++++++++ .../jetty/JettyHttpContainerProvider.java | 12 +- .../jersey/jetty/JettyHttpContainer.java | 0 .../jetty/JettyHttpContainerFactory.java | 0 .../jersey/jetty/JettyHttpContainer.java | 58 +++++++ .../jetty/internal/localization.properties | 3 +- containers/pom.xml | 12 +- test-framework/providers/jetty/pom.xml | 141 +++++++++++++++++ .../test/jetty/JettyTestContainerFactory.java | 0 .../test/jetty/JettyTestContainerFactory.java | 38 +++++ .../jetty/internal/localization.properties | 18 +++ test-framework/providers/pom.xml | 12 +- 21 files changed, 621 insertions(+), 64 deletions(-) rename connectors/jetty-connector/src/main/{java => java11}/org/glassfish/jersey/jetty/connector/JettyConnector.java (100%) rename connectors/jetty-connector/src/main/{java => java11}/org/glassfish/jersey/jetty/connector/JettyConnectorProvider.java (95%) rename connectors/jetty-connector/src/main/{java => java11}/org/glassfish/jersey/jetty/connector/JettyHttpClientContract.java (100%) rename connectors/jetty-connector/src/main/{java => java11}/org/glassfish/jersey/jetty/connector/JettyHttpClientSupplier.java (100%) create mode 100644 connectors/jetty-connector/src/main/java8/org/glassfish/jersey/jetty/connector/JettyConnectorProvider.java rename containers/jetty-http/src/main/{java => java11}/org/glassfish/jersey/jetty/JettyHttpContainer.java (100%) rename containers/jetty-http/src/main/{java => java11}/org/glassfish/jersey/jetty/JettyHttpContainerFactory.java (100%) create mode 100644 containers/jetty-http/src/main/java8/org/glassfish/jersey/jetty/JettyHttpContainer.java rename test-framework/providers/jetty/src/main/{java => java11}/org/glassfish/jersey/test/jetty/JettyTestContainerFactory.java (100%) create mode 100644 test-framework/providers/jetty/src/main/java8/org/glassfish/jersey/test/jetty/JettyTestContainerFactory.java create mode 100644 test-framework/providers/jetty/src/main/resources/org/glassfish/jersey/jetty/internal/localization.properties diff --git a/bom/pom.xml b/bom/pom.xml index 0096d6e2bb..5fcbaca456 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -73,6 +73,11 @@ <artifactId>jersey-grizzly-connector</artifactId> <version>${project.version}</version> </dependency> + <dependency> + <groupId>org.glassfish.jersey.connectors</groupId> + <artifactId>jersey-jetty-connector</artifactId> + <version>${project.version}</version> + </dependency> <dependency> <groupId>org.glassfish.jersey.connectors</groupId> <artifactId>jersey-jdk-connector</artifactId> @@ -83,6 +88,11 @@ <artifactId>jersey-netty-connector</artifactId> <version>${project.version}</version> </dependency> + <dependency> + <groupId>org.glassfish.jersey.containers</groupId> + <artifactId>jersey-container-jetty-http</artifactId> + <version>${project.version}</version> + </dependency> <dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-grizzly2-http</artifactId> @@ -93,6 +103,11 @@ <artifactId>jersey-container-grizzly2-servlet</artifactId> <version>${project.version}</version> </dependency> + <dependency> + <groupId>org.glassfish.jersey.containers</groupId> + <artifactId>jersey-container-jetty-servlet</artifactId> + <version>${project.version}</version> + </dependency> <dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-jdk-http</artifactId> @@ -354,6 +369,11 @@ <artifactId>jersey-test-framework-provider-simple</artifactId> <version>${project.version}</version> </dependency> + <dependency> + <groupId>org.glassfish.jersey.test-framework.providers</groupId> + <artifactId>jersey-test-framework-provider-jetty</artifactId> + <version>${project.version}</version> + </dependency> <dependency> <groupId>org.glassfish.jersey.test-framework</groupId> <artifactId>jersey-test-framework-util</artifactId> @@ -393,33 +413,5 @@ </site> </distributionManagement> </profile> - <profile> - <id>Jetty11</id> - <activation> - <jdk>[11,)</jdk> - </activation> - <dependencies> - <dependency> - <groupId>org.glassfish.jersey.connectors</groupId> - <artifactId>jersey-jetty-connector</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>org.glassfish.jersey.containers</groupId> - <artifactId>jersey-container-jetty-http</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>org.glassfish.jersey.containers</groupId> - <artifactId>jersey-container-jetty-servlet</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>org.glassfish.jersey.test-framework.providers</groupId> - <artifactId>jersey-test-framework-provider-jetty</artifactId> - <version>${project.version}</version> - </dependency> - </dependencies> - </profile> </profiles> </project> diff --git a/connectors/jetty-connector/pom.xml b/connectors/jetty-connector/pom.xml index 9d799b626b..63566b94dc 100644 --- a/connectors/jetty-connector/pom.xml +++ b/connectors/jetty-connector/pom.xml @@ -34,6 +34,10 @@ <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <java8.build.outputDirectory>${project.basedir}/target</java8.build.outputDirectory> + <java8.sourceDirectory>${project.basedir}/src/main/java8</java8.sourceDirectory> + <java11.build.outputDirectory>${project.basedir}/target11</java11.build.outputDirectory> + <java11.sourceDirectory>${project.basedir}/src/main/java11</java11.sourceDirectory> </properties> <dependencies> @@ -119,6 +123,140 @@ <skip.tests>true</skip.tests> </properties> </profile> + <profile> + <id>JettyExclude</id> + <activation> + <jdk>1.8</jdk> + </activation> + <build> + <directory>${java8.build.outputDirectory}</directory> + <plugins> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>build-helper-maven-plugin</artifactId> + <executions> + <execution> + <phase>generate-sources</phase> + <goals> + <goal>add-source</goal> + </goals> + <configuration> + <sources> + <source>${java8.sourceDirectory}</source> + </sources> + </configuration> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <configuration> + <testExcludes> + <testExclude>org/glassfish/jersey/jetty/connector/*.java</testExclude> + </testExcludes> + </configuration> + </plugin> + </plugins> + </build> + </profile> + <profile> + <id>Jetty11</id> + <activation> + <jdk>[11,)</jdk> + </activation> + <build> + <directory>${java11.build.outputDirectory}</directory> + <plugins> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>build-helper-maven-plugin</artifactId> + <executions> + <execution> + <phase>generate-sources</phase> + <goals> + <goal>add-source</goal> + </goals> + <configuration> + <sources> + <source>${java11.sourceDirectory}</source> + </sources> + </configuration> + </execution> + </executions> + </plugin> + </plugins> + </build> + </profile> + <profile> + <id>copyJDK11FilesToMultiReleaseJar</id> + <activation> + <file> + <!-- ${java11.build.outputDirectory} does not work here --> + <exists>target11/classes/org/glassfish/jersey/jetty/connector/JettyConnectorProvider.class</exists> + </file> + <jdk>1.8</jdk> + </activation> + <build> + <plugins> + <plugin> + <groupId>org.apache.felix</groupId> + <artifactId>maven-bundle-plugin</artifactId> + <inherited>true</inherited> + <extensions>true</extensions> + <configuration> + <instructions> + <Multi-Release>true</Multi-Release> + </instructions> + </configuration> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-resources-plugin</artifactId> + <inherited>true</inherited> + <executions> + <execution> + <id>copy-jdk11-classes</id> + <phase>prepare-package</phase> + <goals> + <goal>copy-resources</goal> + </goals> + <configuration> + <outputDirectory>${java8.build.outputDirectory}/classes/META-INF/versions/11</outputDirectory> + <resources> + <resource> + <directory>${java11.build.outputDirectory}/classes</directory> + </resource> + </resources> + </configuration> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-antrun-plugin</artifactId> + <executions> + <execution> + <id>copy-jdk11-sources</id> + <phase>package</phase> + <configuration> + <target> + <property name="sources-jar" value="${java8.build.outputDirectory}/${project.artifactId}-${project.version}-sources.jar"/> + <echo>sources-jar: ${sources-jar}</echo> + <zip destfile="${sources-jar}" update="true"> + <zipfileset dir="${java11.sourceDirectory}" prefix="META-INF/versions/11"/> + </zip> + </target> + </configuration> + <goals> + <goal>run</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> + </profile> </profiles> </project> diff --git a/connectors/jetty-connector/src/main/java/org/glassfish/jersey/jetty/connector/JettyConnector.java b/connectors/jetty-connector/src/main/java11/org/glassfish/jersey/jetty/connector/JettyConnector.java similarity index 100% rename from connectors/jetty-connector/src/main/java/org/glassfish/jersey/jetty/connector/JettyConnector.java rename to connectors/jetty-connector/src/main/java11/org/glassfish/jersey/jetty/connector/JettyConnector.java diff --git a/connectors/jetty-connector/src/main/java/org/glassfish/jersey/jetty/connector/JettyConnectorProvider.java b/connectors/jetty-connector/src/main/java11/org/glassfish/jersey/jetty/connector/JettyConnectorProvider.java similarity index 95% rename from connectors/jetty-connector/src/main/java/org/glassfish/jersey/jetty/connector/JettyConnectorProvider.java rename to connectors/jetty-connector/src/main/java11/org/glassfish/jersey/jetty/connector/JettyConnectorProvider.java index 9fedd0b881..44146c89ab 100644 --- a/connectors/jetty-connector/src/main/java/org/glassfish/jersey/jetty/connector/JettyConnectorProvider.java +++ b/connectors/jetty-connector/src/main/java11/org/glassfish/jersey/jetty/connector/JettyConnectorProvider.java @@ -16,6 +16,7 @@ package org.glassfish.jersey.jetty.connector; +import jakarta.ws.rs.ProcessingException; import jakarta.ws.rs.client.Client; import jakarta.ws.rs.core.Configurable; import jakarta.ws.rs.core.Configuration; @@ -25,6 +26,7 @@ import org.glassfish.jersey.client.spi.ConnectorProvider; import org.eclipse.jetty.client.HttpClient; +import org.glassfish.jersey.internal.util.JdkVersion; /** * A {@link ConnectorProvider} for Jersey {@link Connector connector} @@ -82,6 +84,9 @@ public class JettyConnectorProvider implements ConnectorProvider { @Override public Connector getConnector(Client client, Configuration runtimeConfig) { + if (JdkVersion.getJdkVersion().getMajor() < 11) { + throw new ProcessingException(LocalizationMessages.NOT_SUPPORTED()); + } return new JettyConnector(client, runtimeConfig); } diff --git a/connectors/jetty-connector/src/main/java/org/glassfish/jersey/jetty/connector/JettyHttpClientContract.java b/connectors/jetty-connector/src/main/java11/org/glassfish/jersey/jetty/connector/JettyHttpClientContract.java similarity index 100% rename from connectors/jetty-connector/src/main/java/org/glassfish/jersey/jetty/connector/JettyHttpClientContract.java rename to connectors/jetty-connector/src/main/java11/org/glassfish/jersey/jetty/connector/JettyHttpClientContract.java diff --git a/connectors/jetty-connector/src/main/java/org/glassfish/jersey/jetty/connector/JettyHttpClientSupplier.java b/connectors/jetty-connector/src/main/java11/org/glassfish/jersey/jetty/connector/JettyHttpClientSupplier.java similarity index 100% rename from connectors/jetty-connector/src/main/java/org/glassfish/jersey/jetty/connector/JettyHttpClientSupplier.java rename to connectors/jetty-connector/src/main/java11/org/glassfish/jersey/jetty/connector/JettyHttpClientSupplier.java diff --git a/connectors/jetty-connector/src/main/java8/org/glassfish/jersey/jetty/connector/JettyConnectorProvider.java b/connectors/jetty-connector/src/main/java8/org/glassfish/jersey/jetty/connector/JettyConnectorProvider.java new file mode 100644 index 0000000000..8723025ad3 --- /dev/null +++ b/connectors/jetty-connector/src/main/java8/org/glassfish/jersey/jetty/connector/JettyConnectorProvider.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2020 Oracle and/or its affiliates. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0, which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * This Source Code may also be made available under the following Secondary + * Licenses when the conditions for such availability set forth in the + * Eclipse Public License v. 2.0 are satisfied: GNU General Public License, + * version 2 with the GNU Classpath Exception, which is available at + * https://www.gnu.org/software/classpath/license.html. + * + * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + */ + +package org.glassfish.jersey.jetty.connector; + +import jakarta.ws.rs.ProcessingException; +import jakarta.ws.rs.client.Client; +import jakarta.ws.rs.core.Configuration; + +import org.glassfish.jersey.client.spi.Connector; +import org.glassfish.jersey.client.spi.ConnectorProvider; + +import org.glassfish.jersey.internal.util.JdkVersion; + +/** + * JDK 1.8 Jetty Connector stub which only throws exception when running on JDK 1.8 + * New Jetty (11+) does not support JDKs prior to 11 + * + * @since 3.0.0 + */ +public class JettyConnectorProvider implements ConnectorProvider { + + @Override + public Connector getConnector(Client client, Configuration runtimeConfig) { + if (JdkVersion.getJdkVersion().getMajor() < 11) { + throw new ProcessingException(LocalizationMessages.NOT_SUPPORTED()); + } + return null; // does not work at JDK 1.8 + } + +} diff --git a/connectors/jetty-connector/src/main/resources/org/glassfish/jersey/jetty/connector/localization.properties b/connectors/jetty-connector/src/main/resources/org/glassfish/jersey/jetty/connector/localization.properties index 15d9708e91..af1151850c 100644 --- a/connectors/jetty-connector/src/main/resources/org/glassfish/jersey/jetty/connector/localization.properties +++ b/connectors/jetty-connector/src/main/resources/org/glassfish/jersey/jetty/connector/localization.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2013, 2020 Oracle and/or its affiliates. All rights reserved. # # This program and the accompanying materials are made available under the # terms of the Eclipse Public License v. 2.0, which is available at @@ -20,3 +20,4 @@ method.not.supported=Method {0} not supported. wrong.proxy.uri.type=The proxy URI ("{0}") property MUST be an instance of String or URI. invalid.configurable.component.type=The supplied component "{0}" is not assignable from JerseyClient or JerseyWebTarget. expected.connector.provider.not.used=The supplied component is not configured to use a JettyConnectorProvider. +not.supported=Jetty connector is not supported on JDK version less than 11. diff --git a/connectors/pom.xml b/connectors/pom.xml index daa8703432..15c1fd6e53 100644 --- a/connectors/pom.xml +++ b/connectors/pom.xml @@ -37,6 +37,7 @@ <module>apache-connector</module> <module>grizzly-connector</module> <module>jdk-connector</module> + <module>jetty-connector</module> <module>netty-connector</module> </modules> @@ -86,14 +87,5 @@ <module>helidon-connector</module> </modules> </profile> - <profile> - <id>Jetty11</id> - <activation> - <jdk>[11,)</jdk> - </activation> - <modules> - <module>jetty-connector</module> - </modules> - </profile> </profiles> </project> diff --git a/containers/jetty-http/pom.xml b/containers/jetty-http/pom.xml index ddfb891f86..b517d2ac49 100644 --- a/containers/jetty-http/pom.xml +++ b/containers/jetty-http/pom.xml @@ -81,4 +81,147 @@ </resources> </build> + <properties> + <java8.build.outputDirectory>${project.basedir}/target</java8.build.outputDirectory> + <java8.sourceDirectory>${project.basedir}/src/main/java8</java8.sourceDirectory> + <java11.build.outputDirectory>${project.basedir}/target11</java11.build.outputDirectory> + <java11.sourceDirectory>${project.basedir}/src/main/java11</java11.sourceDirectory> + </properties> + + <profiles> + <profile> + <id>JettyExclude</id> + <activation> + <jdk>1.8</jdk> + </activation> + <build> + <directory>${java8.build.outputDirectory}</directory> + <plugins> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>build-helper-maven-plugin</artifactId> + <executions> + <execution> + <phase>generate-sources</phase> + <goals> + <goal>add-source</goal> + </goals> + <configuration> + <sources> + <source>${java8.sourceDirectory}</source> + </sources> + </configuration> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <configuration> + <testExcludes> + <testExclude>org/glassfish/jersey/jetty/*.java</testExclude> + </testExcludes> + </configuration> + </plugin> + </plugins> + </build> + </profile> + <profile> + <id>Jetty11</id> + <activation> + <jdk>[11,)</jdk> + </activation> + <build> + <directory>${java11.build.outputDirectory}</directory> + <plugins> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>build-helper-maven-plugin</artifactId> + <executions> + <execution> + <phase>generate-sources</phase> + <goals> + <goal>add-source</goal> + </goals> + <configuration> + <sources> + <source>${java11.sourceDirectory}</source> + </sources> + </configuration> + </execution> + </executions> + </plugin> + </plugins> + </build> + </profile> + <profile> + <id>copyJDK11FilesToMultiReleaseJar</id> + <activation> + <file> + <!-- ${java11.build.outputDirectory} does not work here --> + <exists>target11/classes/org/glassfish/jersey/jetty/JettyHttpContainer.class</exists> + </file> + <jdk>1.8</jdk> + </activation> + <build> + <plugins> + <plugin> + <groupId>org.apache.felix</groupId> + <artifactId>maven-bundle-plugin</artifactId> + <inherited>true</inherited> + <extensions>true</extensions> + <configuration> + <instructions> + <Multi-Release>true</Multi-Release> + </instructions> + </configuration> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-resources-plugin</artifactId> + <inherited>true</inherited> + <executions> + <execution> + <id>copy-jdk11-classes</id> + <phase>prepare-package</phase> + <goals> + <goal>copy-resources</goal> + </goals> + <configuration> + <outputDirectory>${java8.build.outputDirectory}/classes/META-INF/versions/11</outputDirectory> + <resources> + <resource> + <directory>${java11.build.outputDirectory}/classes</directory> + </resource> + </resources> + </configuration> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-antrun-plugin</artifactId> + <executions> + <execution> + <id>copy-jdk11-sources</id> + <phase>package</phase> + <configuration> + <target> + <property name="sources-jar" value="${java8.build.outputDirectory}/${project.artifactId}-${project.version}-sources.jar"/> + <echo>sources-jar: ${sources-jar}</echo> + <zip destfile="${sources-jar}" update="true"> + <zipfileset dir="${java11.sourceDirectory}" prefix="META-INF/versions/11"/> + </zip> + </target> + </configuration> + <goals> + <goal>run</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> + </profile> + </profiles> </project> diff --git a/containers/jetty-http/src/main/java/org/glassfish/jersey/jetty/JettyHttpContainerProvider.java b/containers/jetty-http/src/main/java/org/glassfish/jersey/jetty/JettyHttpContainerProvider.java index 4a2d6c9f55..f4faac678a 100644 --- a/containers/jetty-http/src/main/java/org/glassfish/jersey/jetty/JettyHttpContainerProvider.java +++ b/containers/jetty-http/src/main/java/org/glassfish/jersey/jetty/JettyHttpContainerProvider.java @@ -19,10 +19,10 @@ import jakarta.ws.rs.ProcessingException; import jakarta.ws.rs.core.Application; +import org.glassfish.jersey.internal.util.JdkVersion; +import org.glassfish.jersey.jetty.internal.LocalizationMessages; import org.glassfish.jersey.server.spi.ContainerProvider; -import org.eclipse.jetty.server.Handler; - /** * Container provider for containers based on Jetty Server {@link org.eclipse.jetty.server.Handler}. * @@ -33,7 +33,13 @@ public final class JettyHttpContainerProvider implements ContainerProvider { @Override public <T> T createContainer(final Class<T> type, final Application application) throws ProcessingException { - if (Handler.class == type || JettyHttpContainer.class == type) { + if (JdkVersion.getJdkVersion().getMajor() < 11) { + throw new ProcessingException(LocalizationMessages.NOT_SUPPORTED()); + } + if (type != null + && ("org.eclipse.jetty.server.Handler".equalsIgnoreCase(type.getCanonicalName()) + || JettyHttpContainer.class == type) + ) { return type.cast(new JettyHttpContainer(application)); } return null; diff --git a/containers/jetty-http/src/main/java/org/glassfish/jersey/jetty/JettyHttpContainer.java b/containers/jetty-http/src/main/java11/org/glassfish/jersey/jetty/JettyHttpContainer.java similarity index 100% rename from containers/jetty-http/src/main/java/org/glassfish/jersey/jetty/JettyHttpContainer.java rename to containers/jetty-http/src/main/java11/org/glassfish/jersey/jetty/JettyHttpContainer.java diff --git a/containers/jetty-http/src/main/java/org/glassfish/jersey/jetty/JettyHttpContainerFactory.java b/containers/jetty-http/src/main/java11/org/glassfish/jersey/jetty/JettyHttpContainerFactory.java similarity index 100% rename from containers/jetty-http/src/main/java/org/glassfish/jersey/jetty/JettyHttpContainerFactory.java rename to containers/jetty-http/src/main/java11/org/glassfish/jersey/jetty/JettyHttpContainerFactory.java diff --git a/containers/jetty-http/src/main/java8/org/glassfish/jersey/jetty/JettyHttpContainer.java b/containers/jetty-http/src/main/java8/org/glassfish/jersey/jetty/JettyHttpContainer.java new file mode 100644 index 0000000000..b852e54c22 --- /dev/null +++ b/containers/jetty-http/src/main/java8/org/glassfish/jersey/jetty/JettyHttpContainer.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2020 Oracle and/or its affiliates. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0, which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * This Source Code may also be made available under the following Secondary + * Licenses when the conditions for such availability set forth in the + * Eclipse Public License v. 2.0 are satisfied: GNU General Public License, + * version 2 with the GNU Classpath Exception, which is available at + * https://www.gnu.org/software/classpath/license.html. + * + * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + */ + +package org.glassfish.jersey.jetty; + +import jakarta.ws.rs.ProcessingException; +import jakarta.ws.rs.core.Application; +import org.glassfish.jersey.jetty.internal.LocalizationMessages; +import org.glassfish.jersey.server.ApplicationHandler; +import org.glassfish.jersey.server.ResourceConfig; +import org.glassfish.jersey.server.spi.Container; + +/** + * Jersey {@code Container} stub based on Jetty {@link org.eclipse.jetty.server.Handler}. + * + * For JDK 1.8 only since Jetty 11 does not support JDKs below 11 + * + */ +public final class JettyHttpContainer implements Container { + + public JettyHttpContainer(Application application) { + throw new ProcessingException(LocalizationMessages.NOT_SUPPORTED()); + } + + @Override + public ResourceConfig getConfiguration() { + throw new ProcessingException(LocalizationMessages.NOT_SUPPORTED()); + } + + @Override + public ApplicationHandler getApplicationHandler() { + throw new ProcessingException(LocalizationMessages.NOT_SUPPORTED()); + } + + @Override + public void reload() { + throw new ProcessingException(LocalizationMessages.NOT_SUPPORTED()); + } + + @Override + public void reload(ResourceConfig configuration) { + throw new ProcessingException(LocalizationMessages.NOT_SUPPORTED()); + } + +} diff --git a/containers/jetty-http/src/main/resources/org/glassfish/jersey/jetty/internal/localization.properties b/containers/jetty-http/src/main/resources/org/glassfish/jersey/jetty/internal/localization.properties index b1528f8624..6d0d06c5fd 100644 --- a/containers/jetty-http/src/main/resources/org/glassfish/jersey/jetty/internal/localization.properties +++ b/containers/jetty-http/src/main/resources/org/glassfish/jersey/jetty/internal/localization.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2013, 2020 Oracle and/or its affiliates. All rights reserved. # # This program and the accompanying materials are made available under the # terms of the Eclipse Public License v. 2.0, which is available at @@ -21,3 +21,4 @@ unable.to.close.response=Unable to close response output. uri.cannot.be.null=The URI must not be null. wrong.scheme.when.using.http=The URI scheme should be 'http' when not using SSL. wrong.scheme.when.using.https=The URI scheme should be 'https' when using SSL. +not.supported=Jetty container is not supported on JDK version less than 11. diff --git a/containers/pom.xml b/containers/pom.xml index 25f49f35ec..a197f5cbb7 100644 --- a/containers/pom.xml +++ b/containers/pom.xml @@ -40,6 +40,7 @@ <module>jdk-http</module> <module>jersey-servlet-core</module> <module>jersey-servlet</module> + <module>jetty-http</module> <!-- TODO jakartify this --> <!-- <module>jetty-servlet</module>--> <module>netty-http</module> @@ -76,15 +77,4 @@ </dependency> </dependencies> - <profiles> - <profile> - <id>Jetty11</id> - <activation> - <jdk>[11,)</jdk> - </activation> - <modules> - <module>jetty-http</module> - </modules> - </profile> - </profiles> </project> diff --git a/test-framework/providers/jetty/pom.xml b/test-framework/providers/jetty/pom.xml index fc48a8b99a..a9ddbd8632 100644 --- a/test-framework/providers/jetty/pom.xml +++ b/test-framework/providers/jetty/pom.xml @@ -44,6 +44,13 @@ </dependency> </dependencies> + <properties> + <java8.build.outputDirectory>${project.basedir}/target</java8.build.outputDirectory> + <java8.sourceDirectory>${project.basedir}/src/main/java8</java8.sourceDirectory> + <java11.build.outputDirectory>${project.basedir}/target11</java11.build.outputDirectory> + <java11.sourceDirectory>${project.basedir}/src/main/java11</java11.sourceDirectory> + </properties> + <profiles> <profile> <id>testsSkipJdk6</id> @@ -54,6 +61,140 @@ <skip.tests>true</skip.tests> </properties> </profile> + <profile> + <id>JettyExclude</id> + <activation> + <jdk>1.8</jdk> + </activation> + <build> + <directory>${java8.build.outputDirectory}</directory> + <plugins> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>build-helper-maven-plugin</artifactId> + <executions> + <execution> + <phase>generate-sources</phase> + <goals> + <goal>add-source</goal> + </goals> + <configuration> + <sources> + <source>${java8.sourceDirectory}</source> + </sources> + </configuration> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <configuration> + <testExcludes> + <testExclude>org/glassfish/jersey/test/jetty/*.java</testExclude> + </testExcludes> + </configuration> + </plugin> + </plugins> + </build> + </profile> + <profile> + <id>Jetty11</id> + <activation> + <jdk>[11,)</jdk> + </activation> + <build> + <directory>${java11.build.outputDirectory}</directory> + <plugins> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>build-helper-maven-plugin</artifactId> + <executions> + <execution> + <phase>generate-sources</phase> + <goals> + <goal>add-source</goal> + </goals> + <configuration> + <sources> + <source>${java11.sourceDirectory}</source> + </sources> + </configuration> + </execution> + </executions> + </plugin> + </plugins> + </build> + </profile> + <profile> + <id>copyJDK11FilesToMultiReleaseJar</id> + <activation> + <file> + <!-- ${java11.build.outputDirectory} does not work here --> + <exists>target11/classes/org/glassfish/jersey/jetty/connector/JettyConnectorProvider.class</exists> + </file> + <jdk>1.8</jdk> + </activation> + <build> + <plugins> + <plugin> + <groupId>org.apache.felix</groupId> + <artifactId>maven-bundle-plugin</artifactId> + <inherited>true</inherited> + <extensions>true</extensions> + <configuration> + <instructions> + <Multi-Release>true</Multi-Release> + </instructions> + </configuration> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-resources-plugin</artifactId> + <inherited>true</inherited> + <executions> + <execution> + <id>copy-jdk11-classes</id> + <phase>prepare-package</phase> + <goals> + <goal>copy-resources</goal> + </goals> + <configuration> + <outputDirectory>${java8.build.outputDirectory}/classes/META-INF/versions/11</outputDirectory> + <resources> + <resource> + <directory>${java11.build.outputDirectory}/classes</directory> + </resource> + </resources> + </configuration> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-antrun-plugin</artifactId> + <executions> + <execution> + <id>copy-jdk11-sources</id> + <phase>package</phase> + <configuration> + <target> + <property name="sources-jar" value="${java8.build.outputDirectory}/${project.artifactId}-${project.version}-sources.jar"/> + <echo>sources-jar: ${sources-jar}</echo> + <zip destfile="${sources-jar}" update="true"> + <zipfileset dir="${java11.sourceDirectory}" prefix="META-INF/versions/11"/> + </zip> + </target> + </configuration> + <goals> + <goal>run</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> + </profile> </profiles> </project> diff --git a/test-framework/providers/jetty/src/main/java/org/glassfish/jersey/test/jetty/JettyTestContainerFactory.java b/test-framework/providers/jetty/src/main/java11/org/glassfish/jersey/test/jetty/JettyTestContainerFactory.java similarity index 100% rename from test-framework/providers/jetty/src/main/java/org/glassfish/jersey/test/jetty/JettyTestContainerFactory.java rename to test-framework/providers/jetty/src/main/java11/org/glassfish/jersey/test/jetty/JettyTestContainerFactory.java diff --git a/test-framework/providers/jetty/src/main/java8/org/glassfish/jersey/test/jetty/JettyTestContainerFactory.java b/test-framework/providers/jetty/src/main/java8/org/glassfish/jersey/test/jetty/JettyTestContainerFactory.java new file mode 100644 index 0000000000..cd2e33238c --- /dev/null +++ b/test-framework/providers/jetty/src/main/java8/org/glassfish/jersey/test/jetty/JettyTestContainerFactory.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2020 Oracle and/or its affiliates. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0, which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * This Source Code may also be made available under the following Secondary + * Licenses when the conditions for such availability set forth in the + * Eclipse Public License v. 2.0 are satisfied: GNU General Public License, + * version 2 with the GNU Classpath Exception, which is available at + * https://www.gnu.org/software/classpath/license.html. + * + * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + */ + +package org.glassfish.jersey.test.jetty; + +import jakarta.ws.rs.ProcessingException; +import org.glassfish.jersey.jetty.internal.LocalizationMessages; +import org.glassfish.jersey.test.DeploymentContext; +import org.glassfish.jersey.test.spi.TestContainer; +import org.glassfish.jersey.test.spi.TestContainerFactory; + +import java.net.URI; + +/** + * Jetty test factory stub for JDK 1.8 only + * + * since Jetty 11+ does not support JDKs below 11 + */ +public class JettyTestContainerFactory implements TestContainerFactory { + + @Override + public TestContainer create(final URI baseUri, final DeploymentContext context) throws IllegalArgumentException { + throw new ProcessingException(LocalizationMessages.NOT_SUPPORTED()); + } +} diff --git a/test-framework/providers/jetty/src/main/resources/org/glassfish/jersey/jetty/internal/localization.properties b/test-framework/providers/jetty/src/main/resources/org/glassfish/jersey/jetty/internal/localization.properties new file mode 100644 index 0000000000..c362bf0957 --- /dev/null +++ b/test-framework/providers/jetty/src/main/resources/org/glassfish/jersey/jetty/internal/localization.properties @@ -0,0 +1,18 @@ +# +# Copyright (c) 2020 Oracle and/or its affiliates. All rights reserved. +# +# This program and the accompanying materials are made available under the +# terms of the Eclipse Public License v. 2.0, which is available at +# http://www.eclipse.org/legal/epl-2.0. +# +# This Source Code may also be made available under the following Secondary +# Licenses when the conditions for such availability set forth in the +# Eclipse Public License v. 2.0 are satisfied: GNU General Public License, +# version 2 with the GNU Classpath Exception, which is available at +# https://www.gnu.org/software/classpath/license.html. +# +# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 +# + +# {0} - status code; {1} - status reason message +not.supported=Jetty container is not supported on JDK version less than 11. diff --git a/test-framework/providers/pom.xml b/test-framework/providers/pom.xml index 10764da335..025ad4a32d 100644 --- a/test-framework/providers/pom.xml +++ b/test-framework/providers/pom.xml @@ -39,18 +39,8 @@ <module>grizzly2</module> <module>inmemory</module> <module>jdk-http</module> + <module>jetty</module> <module>netty</module> <module>simple</module> </modules> - <profiles> - <profile> - <id>Jetty11</id> - <activation> - <jdk>[11,)</jdk> - </activation> - <modules> - <module>jetty</module> - </modules> - </profile> - </profiles> </project>