merge of the actual 2.x into the 3.0
diff --git a/bundles/jaxrs-ri/pom.xml b/bundles/jaxrs-ri/pom.xml
index ef1772f..130bbf7 100644
--- a/bundles/jaxrs-ri/pom.xml
+++ b/bundles/jaxrs-ri/pom.xml
@@ -395,6 +395,9 @@
<jar destfile="${project.build.directory}/${project.artifactId}-sources.jar" update="true">
<zipfileset dir="../.." includes="NOTICE.md" prefix="META-INF" />
</jar>
+ <jar destfile="${project.build.directory}/${project.artifactId}.jar" update="true">
+ <zipfileset dir="../.." includes="LICENSE.md" prefix="META-INF" />
+ </jar>
</target>
</configuration>
<goals>
diff --git a/connectors/netty-connector/src/main/java/org/glassfish/jersey/netty/connector/NettyConnector.java b/connectors/netty-connector/src/main/java/org/glassfish/jersey/netty/connector/NettyConnector.java
index ede8c36..ab71e1f 100644
--- a/connectors/netty-connector/src/main/java/org/glassfish/jersey/netty/connector/NettyConnector.java
+++ b/connectors/netty-connector/src/main/java/org/glassfish/jersey/netty/connector/NettyConnector.java
@@ -315,7 +315,12 @@
}
// Make the connection attempt.
- chan = b.connect(host, port).sync().channel();
+ try {
+ chan = b.connect(host, port).sync().channel();
+ } catch (Exception e) {
+ responseAvailable.completeExceptionally(e);
+ return;
+ }
}
// assert: clientHandler will always notify responseDone: either normally, or exceptionally
diff --git a/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/ConnectionExceptionTest.java b/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/ConnectionExceptionTest.java
new file mode 100644
index 0000000..d35394e
--- /dev/null
+++ b/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/ConnectionExceptionTest.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2023 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.netty.connector;
+
+import org.glassfish.jersey.client.ClientConfig;
+import org.glassfish.jersey.client.ClientProperties;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import jakarta.ws.rs.ProcessingException;
+import jakarta.ws.rs.client.ClientBuilder;
+import jakarta.ws.rs.core.Response;
+
+public class ConnectionExceptionTest {
+ @Test
+ public void testConnectionException() throws InterruptedException {
+ Assertions.assertThrows(ProcessingException.class, ()-> {
+ ClientConfig clientConfig = new ClientConfig();
+ clientConfig.connectorProvider(new NettyConnectorProvider());
+
+ Response r = ClientBuilder.newClient(clientConfig)
+ .property(ClientProperties.CONNECT_TIMEOUT, 1000)
+ .property(ClientProperties.READ_TIMEOUT, 1000)
+ .target("http://test.nonono:8080").request().get();
+ r.close();
+ });
+ }
+}
diff --git a/core-server/src/main/java/org/glassfish/jersey/server/ChunkedOutput.java b/core-server/src/main/java/org/glassfish/jersey/server/ChunkedOutput.java
index faf37de..2ce0542 100644
--- a/core-server/src/main/java/org/glassfish/jersey/server/ChunkedOutput.java
+++ b/core-server/src/main/java/org/glassfish/jersey/server/ChunkedOutput.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2023 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
@@ -19,6 +19,7 @@
import java.io.Closeable;
import java.io.IOException;
import java.io.OutputStream;
+import java.io.UncheckedIOException;
import java.lang.reflect.Type;
import java.util.Collections;
import java.util.concurrent.BlockingDeque;
@@ -255,11 +256,11 @@
// if MBW replaced the stream, let's make sure to set it in the response context.
responseContext.setEntityStream(writtenStream);
}
- } catch (final IOException ioe) {
+ } catch (final IOException | UncheckedIOException ioe) {
connectionCallback.onDisconnect(asyncContext);
throw ioe;
} catch (final MappableException mpe) {
- if (mpe.getCause() instanceof IOException) {
+ if (mpe.getCause() instanceof IOException || mpe.getCause() instanceof UncheckedIOException) {
connectionCallback.onDisconnect(asyncContext);
}
throw mpe;
diff --git a/media/sse/src/main/java/org/glassfish/jersey/media/sse/internal/JerseyEventSink.java b/media/sse/src/main/java/org/glassfish/jersey/media/sse/internal/JerseyEventSink.java
index 1848144..b1b1dc0 100644
--- a/media/sse/src/main/java/org/glassfish/jersey/media/sse/internal/JerseyEventSink.java
+++ b/media/sse/src/main/java/org/glassfish/jersey/media/sse/internal/JerseyEventSink.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2023 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
@@ -139,7 +139,7 @@
try {
this.write(event);
return CompletableFuture.completedFuture(null);
- } catch (IOException e) {
+ } catch (Exception e) {
CompletableFuture<Void> future = new CompletableFuture<>();
future.completeExceptionally(e);
return future;
diff --git a/tests/release-test/pom.xml b/tests/release-test/pom.xml
index 6f7ad39..53eaf39 100644
--- a/tests/release-test/pom.xml
+++ b/tests/release-test/pom.xml
@@ -65,7 +65,7 @@
<dependency>
<groupId>org.glassfish.jersey</groupId>
<artifactId>jersey-bom</artifactId>
- <version>${jersey.version}</version>
+ <version>${project.version}</version>
<scope>import</scope>
<type>pom</type>
</dependency>
diff --git a/tests/release-test/src/test/java/org/glassfish/jersey/test/artifacts/LegalDocsIncludedTest.java b/tests/release-test/src/test/java/org/glassfish/jersey/test/artifacts/LegalDocsIncludedTest.java
new file mode 100644
index 0000000..74e0281
--- /dev/null
+++ b/tests/release-test/src/test/java/org/glassfish/jersey/test/artifacts/LegalDocsIncludedTest.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2023 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.artifacts;
+
+import org.apache.maven.plugin.testing.AbstractMojoTestCase;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+import java.util.Properties;
+import java.util.jar.JarFile;
+import java.util.stream.Collectors;
+
+public class LegalDocsIncludedTest extends AbstractMojoTestCase {
+ private static final File localRepository = MavenUtil.getLocalMavenRepository();
+ private static final Properties properties = MavenUtil.getMavenProperties();
+
+ private static final String LICENSE_FILE = "LICENSE.md";
+ private static final String NOTICE_FILE = "NOTICE.md";
+
+ @Test
+ public void testLegalFiles() throws IOException, XmlPullParserException {
+ TestResult testResult = new TestResult();
+ List<File> jars = MavenUtil.streamJerseyJars()
+ .map(dependency -> MavenUtil.getArtifactJar(localRepository, dependency, properties))
+ .collect(Collectors.toList());
+
+ for (File jar : jars) {
+ for (String filename : new String[]{LICENSE_FILE, NOTICE_FILE}) {
+ JarFile jarFile = new JarFile(jar);
+ String value;
+ try {
+ value = jarFile.getEntry("META-INF/" + filename).getName();
+ } catch (NullPointerException npe) {
+ value = null;
+ }
+ TestResult.MessageBuilder builder = value != null ? testResult.ok() : testResult.exception();
+ builder.append(jar.getName()).append(value == null ? " DOES NOT CONTAIN " : " CONTAINS ")
+ .append(filename).println(" file");
+ }
+ }
+
+ //Assertions.assertTrue(testResult.result(), "Some error occurred, see previous messages");
+ Assert.assertTrue("Some error occurred, see previous messages", testResult.result());
+ }
+}