Merge remote-tracking branch 'upstream/2.x' into 'upstream/3.0'
Signed-off-by: Maxim Nesen <maxim.nesen@oracle.com>
diff --git a/NOTICE.md b/NOTICE.md
index 2818e63..350c730 100644
--- a/NOTICE.md
+++ b/NOTICE.md
@@ -1,4 +1,4 @@
-# Notice for Jersey
+# Notice for Jersey
This content is produced and maintained by the Eclipse Jersey project.
* Project home: https://projects.eclipse.org/projects/ee4j.jersey
@@ -57,25 +57,25 @@
* Project: http://getbootstrap.com
* Copyright: 2011-2016 Twitter, Inc
-Google Guava Version 18.0
+Google Guava Version 33.3.0-jre
* License: Apache License, 2.0
-* Copyright (C) 2009 The Guava Authors
+* Copyright (C) 2009, 2024 The Guava Authors
-jakarta.inject Version: 1
+jakarta.inject Version: 2.0.1
* License: Apache License, 2.0
-* Copyright (C) 2009 The JSR-330 Expert Group
+* Copyright (C) 2009, 2021 The JSR-330 Expert Group
Javassist Version 3.30.2-GA
* License: Apache License, 2.0
* Project: http://www.javassist.org/
* Copyright (C) 1999- Shigeru Chiba. All Rights Reserved.
-Jackson JAX-RS Providers Version 2.17.1
+Jackson JAX-RS Providers Version 2.17.2
* License: Apache License, 2.0
* Project: https://github.com/FasterXML/jackson-jaxrs-providers
* Copyright: (c) 2009-2024 FasterXML, LLC. All rights reserved unless otherwise indicated.
-jQuery v1.12.4
+jQuery v3.7.1
* License: jquery.org/license
* Project: jquery.org
* Copyright: (c) jQuery Foundation
diff --git a/core-client/src/main/java/org/glassfish/jersey/client/HttpUrlConnectorProvider.java b/core-client/src/main/java/org/glassfish/jersey/client/HttpUrlConnectorProvider.java
index 90d138d..306e336 100644
--- a/core-client/src/main/java/org/glassfish/jersey/client/HttpUrlConnectorProvider.java
+++ b/core-client/src/main/java/org/glassfish/jersey/client/HttpUrlConnectorProvider.java
@@ -21,6 +21,9 @@
import java.net.Proxy;
import java.net.URL;
import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
import java.util.logging.Logger;
import jakarta.ws.rs.client.Client;
@@ -295,9 +298,26 @@
private static class DefaultConnectionFactory implements ConnectionFactory {
+ private final ConcurrentHashMap<URL, Lock> locks = new ConcurrentHashMap<>();
+
@Override
public HttpURLConnection getConnection(final URL url) throws IOException {
- return (HttpURLConnection) url.openConnection();
+ return connect(url, null);
+ }
+
+ @Override
+ public HttpURLConnection getConnection(URL url, Proxy proxy) throws IOException {
+ return connect(url, proxy);
+ }
+
+ private HttpURLConnection connect(URL url, Proxy proxy) throws IOException {
+ Lock lock = locks.computeIfAbsent(url, u -> new ReentrantLock());
+ lock.lock();
+ try {
+ return (proxy == null) ? (HttpURLConnection) url.openConnection() : (HttpURLConnection) url.openConnection(proxy);
+ } finally {
+ lock.unlock();
+ }
}
}
diff --git a/core-common/src/main/java/org/glassfish/jersey/internal/util/collection/Views.java b/core-common/src/main/java/org/glassfish/jersey/internal/util/collection/Views.java
index 32e2640..4765056 100644
--- a/core-common/src/main/java/org/glassfish/jersey/internal/util/collection/Views.java
+++ b/core-common/src/main/java/org/glassfish/jersey/internal/util/collection/Views.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2024 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
@@ -24,13 +24,12 @@
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
+import java.util.Objects;
import java.util.Set;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
-import static org.glassfish.jersey.internal.guava.Preconditions.checkNotNull;
-
/**
* Collections utils, which provide transforming views for {@link List} and {@link Map}.
*
@@ -197,8 +196,8 @@
* @return union view of given sets.
*/
public static <E> Set<E> setUnionView(final Set<? extends E> set1, final Set<? extends E> set2) {
- checkNotNull(set1, "set1");
- checkNotNull(set2, "set2");
+ Objects.requireNonNull(set1, "set1");
+ Objects.requireNonNull(set2, "set2");
return new AbstractSet<E>() {
@Override
@@ -220,18 +219,19 @@
}
/**
- * Create a view of a difference of provided sets.
+ * Create a view of a difference of provided sets, i.e. the diff filters out from the first set the items included
+ * in the second set.
* <p>
* View is updated whenever any of the provided set changes.
*
* @param set1 first set.
* @param set2 second set.
* @param <E> set item type.
- * @return union view of given sets.
+ * @return view that is a difference of given sets.
*/
public static <E> Set<E> setDiffView(final Set<? extends E> set1, final Set<? extends E> set2) {
- checkNotNull(set1, "set1");
- checkNotNull(set2, "set2");
+ Objects.requireNonNull(set1, "set1");
+ Objects.requireNonNull(set2, "set2");
return new AbstractSet<E>() {
@Override
diff --git a/core-common/src/main/java/org/glassfish/jersey/io/package-info.java b/core-common/src/main/java/org/glassfish/jersey/io/package-info.java
new file mode 100644
index 0000000..f913ae6
--- /dev/null
+++ b/core-common/src/main/java/org/glassfish/jersey/io/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2024 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
+ */
+
+/**
+ * Common Jersey core io classes.
+ */
+package org.glassfish.jersey.io;
diff --git a/core-common/src/main/java/org/glassfish/jersey/io/spi/FlushedCloseable.java b/core-common/src/main/java/org/glassfish/jersey/io/spi/FlushedCloseable.java
new file mode 100644
index 0000000..12aa714
--- /dev/null
+++ b/core-common/src/main/java/org/glassfish/jersey/io/spi/FlushedCloseable.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2024 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.io.spi;
+
+import java.io.Closeable;
+import java.io.Flushable;
+import java.io.IOException;
+import java.io.OutputStream;
+
+/**
+ * A marker interface that the stream provided to Jersey can implement,
+ * noting that the stream does not need to call {@link #flush()} prior to {@link #close()}.
+ * That way, {@link #flush()} method is not called twice.
+ *
+ * <p>
+ * Usable by {@link javax.ws.rs.client.ClientRequestContext#setEntityStream(OutputStream)}.
+ * Usable by {@link javax.ws.rs.container.ContainerResponseContext#setEntityStream(OutputStream)}.
+ * </p>
+ *
+ * <p>
+ * This marker interface can be useful for the customer OutputStream to know the {@code flush} did not come from
+ * Jersey before close. By default, when the entity stream is to be closed by Jersey, {@code flush} is called first.
+ * </p>
+ */
+public interface FlushedCloseable extends Flushable, Closeable {
+ /**
+ * Flushes this stream by writing any buffered output to the underlying stream.
+ * Then closes this stream and releases any system resources associated
+ * with it. If the stream is already closed then invoking this
+ * method has no effect.
+ *
+ * <p> As noted in {@link AutoCloseable#close()}, cases where the
+ * close may fail require careful attention. It is strongly advised
+ * to relinquish the underlying resources and to internally
+ * <em>mark</em> the {@code Closeable} as closed, prior to throwing
+ * the {@code IOException}.
+ *
+ * @throws IOException if an I/O error occurs
+ */
+ public void close() throws IOException;
+}
diff --git a/core-common/src/main/java/org/glassfish/jersey/io/spi/package-info.java b/core-common/src/main/java/org/glassfish/jersey/io/spi/package-info.java
new file mode 100644
index 0000000..7a70945
--- /dev/null
+++ b/core-common/src/main/java/org/glassfish/jersey/io/spi/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2024 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
+ */
+
+/**
+ * Common Jersey core io SPI classes.
+ */
+package org.glassfish.jersey.io.spi;
diff --git a/core-common/src/main/java/org/glassfish/jersey/message/internal/OutboundMessageContext.java b/core-common/src/main/java/org/glassfish/jersey/message/internal/OutboundMessageContext.java
index c69f173..b1b7745 100644
--- a/core-common/src/main/java/org/glassfish/jersey/message/internal/OutboundMessageContext.java
+++ b/core-common/src/main/java/org/glassfish/jersey/message/internal/OutboundMessageContext.java
@@ -46,6 +46,7 @@
import org.glassfish.jersey.internal.util.collection.LazyValue;
import org.glassfish.jersey.internal.util.collection.Value;
import org.glassfish.jersey.internal.util.collection.Values;
+import org.glassfish.jersey.io.spi.FlushedCloseable;
/**
* Base outbound message context implementation.
@@ -561,11 +562,13 @@
if (hasEntity()) {
try {
final OutputStream es = getEntityStream();
- es.flush();
+ if (!FlushedCloseable.class.isInstance(es)) {
+ es.flush();
+ }
es.close();
} catch (IOException e) {
// Happens when the client closed connection before receiving the full response.
- // This is OK and not interesting in vast majority of the cases
+ // This is OK and not interesting in the vast majority of the cases
// hence the log level set to FINE to make sure it does not flood the log unnecessarily
// (especially for clients disconnecting from SSE listening, which is very common).
Logger.getLogger(OutboundMessageContext.class.getName()).log(Level.FINE, e.getMessage(), e);
diff --git a/examples/NOTICE.md b/examples/NOTICE.md
index 034205c..82590e4 100644
--- a/examples/NOTICE.md
+++ b/examples/NOTICE.md
@@ -1,4 +1,4 @@
-# Notice for Jersey
+# Notice for Jersey
This content is produced and maintained by the Eclipse Jersey project.
* Project home: https://projects.eclipse.org/projects/ee4j.jersey
@@ -39,8 +39,8 @@
Bean Validation API 3.0.2
* License: Apache License, 2.0
-* Project: http://beanvalidation.org/1.1/
-* Copyright: 2009, Red Hat, Inc. and/or its affiliates, and individual contributors
+* Project: http://beanvalidation.org/3.0/
+* Copyright: 2009, 2020 Red Hat, Inc. and/or its affiliates, and individual contributors
* by the @authors tag.
Hibernate Validator CDI, 7.0.5.Final
@@ -58,25 +58,25 @@
* Project: http://www.seamframework.org/Weld
* Copyright 2010, Red Hat, Inc., and individual contributors by the @authors tag.
-Google Guava Version 18.0
+Google Guava Version 33.3.0-jre
* License: Apache License, 2.0
-* Copyright (C) 2009 The Guava Authors
+* Copyright (C) 2009, 2024 The Guava Authors
-jakarta.inject Version: 1
+jakarta.inject Version: 2.0.1
* License: Apache License, 2.0
-* Copyright (C) 2009 The JSR-330 Expert Group
+* Copyright (C) 2009, 2021 The JSR-330 Expert Group
Javassist Version 3.30.2-GA
* License: Apache License, 2.0
* Project: http://www.javassist.org/
* Copyright (C) 1999- Shigeru Chiba. All Rights Reserved.
-Jackson JAX-RS Providers Version 2.17.1
+Jackson JAX-RS Providers Version 2.17.2
* License: Apache License, 2.0
* Project: https://github.com/FasterXML/jackson-jaxrs-providers
* Copyright: (c) 2009-2023 FasterXML, LLC. All rights reserved unless otherwise indicated.
-jQuery v1.12.4
+jQuery v3.7.1
* License: jquery.org/license
* Project: jquery.org
* Copyright: (c) jQuery Foundation
diff --git a/examples/extended-wadl-webapp/pom.xml b/examples/extended-wadl-webapp/pom.xml
index ecd9e5a..8d239a7 100644
--- a/examples/extended-wadl-webapp/pom.xml
+++ b/examples/extended-wadl-webapp/pom.xml
@@ -108,8 +108,8 @@
<!-- logging -->
<dependency>
<groupId>org.slf4j</groupId>
- <artifactId>slf4j-log4j12</artifactId>
- <version>2.0.13</version>
+ <artifactId>slf4j-reload4j</artifactId>
+ <version>${slf4j.version}</version>
<scope>test</scope>
</dependency>
diff --git a/examples/osgi-http-service/functional-test/pom.xml b/examples/osgi-http-service/functional-test/pom.xml
index 05b2447..762ba76 100644
--- a/examples/osgi-http-service/functional-test/pom.xml
+++ b/examples/osgi-http-service/functional-test/pom.xml
@@ -144,8 +144,8 @@
<!-- Logging dependencies-->
<dependency>
<groupId>org.slf4j</groupId>
- <artifactId>slf4j-log4j12</artifactId>
- <version>2.0.13</version>
+ <artifactId>slf4j-reload4j</artifactId>
+ <version>${slf4j.version}</version>
<scope>test</scope>
</dependency>
diff --git a/examples/servlet3-webapp/pom.xml b/examples/servlet3-webapp/pom.xml
index 3c6bd33..1e2a7db 100644
--- a/examples/servlet3-webapp/pom.xml
+++ b/examples/servlet3-webapp/pom.xml
@@ -113,6 +113,15 @@
<profiles>
<profile>
+ <id>jdk8_tests</id>
+ <activation>
+ <jdk>1.8</jdk>
+ </activation>
+ <properties>
+ <junit5.version>${junit5.jdk8.version}</junit5.version>
+ </properties>
+ </profile>
+ <profile>
<id>pre-release</id>
<build>
<plugins>
diff --git a/ext/cdi/jersey-cdi1x/src/main/java/org/glassfish/jersey/ext/cdi1x/internal/CdiComponentProvider.java b/ext/cdi/jersey-cdi1x/src/main/java/org/glassfish/jersey/ext/cdi1x/internal/CdiComponentProvider.java
index e5fd3e8..6376f93 100644
--- a/ext/cdi/jersey-cdi1x/src/main/java/org/glassfish/jersey/ext/cdi1x/internal/CdiComponentProvider.java
+++ b/ext/cdi/jersey-cdi1x/src/main/java/org/glassfish/jersey/ext/cdi1x/internal/CdiComponentProvider.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2024 Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2018, 2022 Payara Foundation and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
@@ -45,7 +45,6 @@
import jakarta.inject.Singleton;
import jakarta.ws.rs.core.Application;
-
import jakarta.annotation.ManagedBean;
import jakarta.enterprise.context.Dependent;
import jakarta.enterprise.context.RequestScoped;
@@ -143,6 +142,8 @@
private volatile Map<Class<?>, Set<Method>> methodsToSkip = new HashMap<>();
private volatile Map<Class<?>, Set<Field>> fieldsToSkip = new HashMap<>();
+ private boolean initialized = false;
+
public CdiComponentProvider() {
customHk2TypesProvider = CdiUtil.lookupService(Hk2CustomBoundTypesProvider.class);
injectionManagerStore = CdiUtil.createHk2InjectionManagerStore();
@@ -154,7 +155,7 @@
this.injectionManager = injectionManager;
this.beanManager = CdiUtil.getBeanManager();
- if (beanManager != null) {
+ if (beanManager != null && !injectionManager.getClass().getSimpleName().equals("NonInjectionManager")) {
// Try to get CdiComponentProvider created by CDI.
final CdiComponentProvider extension = beanManager.getExtension(CdiComponentProvider.class);
@@ -167,18 +168,19 @@
bindHk2ClassAnalyzer();
LOGGER.config(LocalizationMessages.CDI_PROVIDER_INITIALIZED());
+ initialized = true;
}
}
}
@Override
public boolean bind(final Class<?> clazz, final Set<Class<?>> providerContracts) {
- return bind(clazz, providerContracts, ContractProvider.NO_PRIORITY);
+ return initialized && bind(clazz, providerContracts, ContractProvider.NO_PRIORITY);
}
@Override
public boolean bind(Class<?> component, ContractProvider contractProvider) {
- return contractProvider != null
+ return initialized && contractProvider != null
? bind(component, contractProvider.getContracts(), contractProvider.getPriority(component))
: bind(component, Collections.EMPTY_SET);
}
@@ -628,11 +630,8 @@
ClassAnalyzer defaultClassAnalyzer =
injectionManager.getInstance(ClassAnalyzer.class, ClassAnalyzer.DEFAULT_IMPLEMENTATION_NAME);
- int skippedElements = methodsToSkip.size() + fieldsToSkip.size();
-
- ClassAnalyzer customizedClassAnalyzer = skippedElements > 0
- ? new InjecteeSkippingAnalyzer(defaultClassAnalyzer, methodsToSkip, fieldsToSkip, beanManager)
- : defaultClassAnalyzer;
+ ClassAnalyzer customizedClassAnalyzer =
+ new InjecteeSkippingAnalyzer(defaultClassAnalyzer, methodsToSkip, fieldsToSkip, beanManager);
Binder binder = new AbstractBinder() {
@Override
diff --git a/media/json-gson/pom.xml b/media/json-gson/pom.xml
index cf0d7e6..a57df78 100644
--- a/media/json-gson/pom.xml
+++ b/media/json-gson/pom.xml
@@ -71,6 +71,12 @@
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
+ <exclusions>
+ <exclusion>
+ <groupId>com.google.errorprone</groupId>
+ <artifactId>error_prone_annotations</artifactId>
+ </exclusion>
+ </exclusions>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
diff --git a/media/json-jackson/src/main/java/org/glassfish/jersey/jackson/internal/jackson/jaxrs/json/PackageVersion.java b/media/json-jackson/src/main/java/org/glassfish/jersey/jackson/internal/jackson/jaxrs/json/PackageVersion.java
index 5d328da..56b1bf6 100644
--- a/media/json-jackson/src/main/java/org/glassfish/jersey/jackson/internal/jackson/jaxrs/json/PackageVersion.java
+++ b/media/json-jackson/src/main/java/org/glassfish/jersey/jackson/internal/jackson/jaxrs/json/PackageVersion.java
@@ -11,7 +11,7 @@
*/
public final class PackageVersion implements Versioned {
public final static Version VERSION = VersionUtil.parseVersion(
- "2.17.1", "com.fasterxml.jackson.jaxrs", "jackson-jaxrs-json-provider");
+ "2.17.2", "com.fasterxml.jackson.jaxrs", "jackson-jaxrs-json-provider");
@Override
public Version version() {
diff --git a/media/json-jackson/src/main/resources/META-INF/NOTICE.markdown b/media/json-jackson/src/main/resources/META-INF/NOTICE.markdown
index 4edecfc..9440229 100644
--- a/media/json-jackson/src/main/resources/META-INF/NOTICE.markdown
+++ b/media/json-jackson/src/main/resources/META-INF/NOTICE.markdown
@@ -31,7 +31,7 @@
## Third-party Content
-Jackson JAX-RS Providers version 2.17.1
+Jackson JAX-RS Providers version 2.17.2
* License: Apache License, 2.0
* Project: https://github.com/FasterXML/jackson-jaxrs-providers
* Copyright: (c) 2009-2023 FasterXML, LLC. All rights reserved unless otherwise indicated.
diff --git a/pom.xml b/pom.xml
index b37f5c0..470eba2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -153,14 +153,14 @@
<url>http://www.eclipse.org/legal/epl-2.0</url>
<distribution>repo</distribution>
<comments>Except for 3rd content and examples.
- See also https://github.com/eclipse-ee4j/jersey/blob/master/NOTICE.md</comments>
+ See also https://github.com/eclipse-ee4j/jersey/blob/master/NOTICE.md</comments>
</license>
<license>
<name>GPL2 w/ CPE</name>
<url>https://www.gnu.org/software/classpath/license.html</url>
<distribution>repo</distribution>
<comments>Except for 3rd content and examples.
- See also https://github.com/eclipse-ee4j/jersey/blob/master/NOTICE.md</comments>
+ See also https://github.com/eclipse-ee4j/jersey/blob/master/NOTICE.md</comments>
</license>
<license>
<name>EDL 1.0</name>
@@ -179,9 +179,9 @@
<url>http://www.apache.org/licenses/LICENSE-2.0.html</url>
<distribution>repo</distribution>
<comments>Google Guava @ org.glassfish.jersey.internal.guava,
- Dropwizard Monitoring inspired classes @ org.glassfish.jersey.server.internal.monitoring.core,
- Hibernate Validation classes @ org.glassfish.jersey.server.validation.internal.hibernate, and
- Jackson JAX-RS Providers @ org.glassfish.jersey.jackson.internal.jackson.jaxrs</comments>
+ Dropwizard Monitoring inspired classes @ org.glassfish.jersey.server.internal.monitoring.core,
+ Hibernate Validation classes @ org.glassfish.jersey.server.validation.internal.hibernate, and
+ Jackson JAX-RS Providers @ org.glassfish.jersey.jackson.internal.jackson.jaxrs</comments>
</license>
<license>
<name>Public Domain</name>
@@ -206,7 +206,7 @@
<url>http://www.opensource.org/licenses/mit-license.php</url>
<distribution>repo</distribution>
<comments>AngularJS, Bootstrap v3.3.7,
- jQuery Barcode plugin 0.3, KineticJS v4.7.1</comments>
+ jQuery Barcode plugin 0.3, KineticJS v4.7.1</comments>
</license>
<license>
<name>W3C license</name>
@@ -944,15 +944,15 @@
<artifactId>maven-compiler-plugin</artifactId>
<inherited>true</inherited>
<executions>
-<!-- when module.info
- <execution>
- <id>default-compile</id>
- <configuration>
- compile everything to ensure module-info contains right entries
- <release>11</release>
- </configuration>
- </execution>
--->
+ <!-- when module.info
+ <execution>
+ <id>default-compile</id>
+ <configuration>
+ compile everything to ensure module-info contains right entries
+ <release>11</release>
+ </configuration>
+ </execution>
+ -->
<execution>
<id>base-compile</id>
<goals>
@@ -986,7 +986,7 @@
</property>
</activation>
<properties>
-<!-- <release.tests.args>-Dskip.tests=true</release.tests.args>-->
+ <!-- <release.tests.args>-Dskip.tests=true</release.tests.args>-->
<skip.tests>true</skip.tests>
</properties>
</profile>
@@ -1013,7 +1013,7 @@
<activation>
<activeByDefault>false</activeByDefault>
<property>
- <name>!tests.excluded</name>
+ <name>!tests.excluded</name>
</property>
</activation>
<modules>
@@ -1109,10 +1109,10 @@
<artifactId>maven-enforcer-plugin</artifactId>
<executions>
<execution>
- <id>enforce-property</id>
- <goals>
- <goal>enforce</goal>
- </goals>
+ <id>enforce-property</id>
+ <goals>
+ <goal>enforce</goal>
+ </goals>
<configuration>
<rules>
<requireProperty>
@@ -1724,7 +1724,7 @@
<groupId>org.simpleframework</groupId>
<artifactId>simple-http</artifactId>
<version>${simple.version}</version>
- </dependency>
+ </dependency>
<dependency>
<groupId>org.simpleframework</groupId>
@@ -2105,9 +2105,9 @@
</dependency>
<dependency>
- <groupId>com.google.code.gson</groupId>
- <artifactId>gson</artifactId>
- <version>${gson.version}</version>
+ <groupId>com.google.code.gson</groupId>
+ <artifactId>gson</artifactId>
+ <version>${gson.version}</version>
</dependency>
<dependency>
@@ -2137,12 +2137,12 @@
jakarta.enterprise
</findbugs.glassfish.logging.validLoggerPrefixes>
<java.version>1.8</java.version>
-<!-- <jersey.repackaged.prefix>jersey.repackaged</jersey.repackaged.prefix>-->
-<!-- <netbeans.hint.license>gf-cddl-gpl</netbeans.hint.license>-->
+ <!-- <jersey.repackaged.prefix>jersey.repackaged</jersey.repackaged.prefix>-->
+ <!-- <netbeans.hint.license>gf-cddl-gpl</netbeans.hint.license>-->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
-<!-- <release.tests.args>-Dmaven.test.skip=false</release.tests.args>-->
-<!-- <release.preparationGoals>clean install</release.preparationGoals>-->
+ <!-- <release.tests.args>-Dmaven.test.skip=false</release.tests.args>-->
+ <!-- <release.preparationGoals>clean install</release.preparationGoals>-->
<skip.tests>false</skip.tests>
<xdk.absolute.path />
<surefire.security.argline />
@@ -2155,13 +2155,13 @@
<antrun.mvn.plugin.version>3.1.0</antrun.mvn.plugin.version>
<mvn.ant.version>1.10.14</mvn.ant.version>
<assembly.mvn.plugin.version>3.7.1</assembly.mvn.plugin.version>
- <clean.mvn.plugin.version>3.3.2</clean.mvn.plugin.version>
- <enforcer.mvn.plugin.version>3.4.1</enforcer.mvn.plugin.version>
- <exec.mvn.plugin.version>3.2.0</exec.mvn.plugin.version>
- <buildhelper.mvn.plugin.version>3.5.0</buildhelper.mvn.plugin.version>
+ <clean.mvn.plugin.version>3.4.0</clean.mvn.plugin.version>
+ <enforcer.mvn.plugin.version>3.5.0</enforcer.mvn.plugin.version>
+ <exec.mvn.plugin.version>3.4.1</exec.mvn.plugin.version>
+ <buildhelper.mvn.plugin.version>3.6.0</buildhelper.mvn.plugin.version>
<buildnumber.mvn.plugin.version>3.2.0</buildnumber.mvn.plugin.version>
- <checkstyle.mvn.plugin.version>3.3.1</checkstyle.mvn.plugin.version>
- <checkstyle.version>10.16.0</checkstyle.version>
+ <checkstyle.mvn.plugin.version>3.4.0</checkstyle.mvn.plugin.version>
+ <checkstyle.version>10.17.0</checkstyle.version>
<compiler.mvn.plugin.version>3.13.0</compiler.mvn.plugin.version>
<!--
Special version of the compiler plugin just for the jersey-common. All versions above
@@ -2170,25 +2170,25 @@
but the jersey-common module which has to have the separate version for OSGi reasons.
-->
<compiler.common.mvn.plugin.version>3.9.0</compiler.common.mvn.plugin.version>
- <cyclonedx.mvn.plugin.version>2.8.0</cyclonedx.mvn.plugin.version>
- <dependency.mvn.plugin.version>3.6.1</dependency.mvn.plugin.version>
+ <cyclonedx.mvn.plugin.version>2.8.1</cyclonedx.mvn.plugin.version>
+ <dependency.mvn.plugin.version>3.7.1</dependency.mvn.plugin.version>
<deploy.mvn.plugin.version>3.1.2</deploy.mvn.plugin.version>
<ear.mvn.plugin.version>3.3.0</ear.mvn.plugin.version>
- <failsafe.mvn.plugin.version>3.2.5</failsafe.mvn.plugin.version>
+ <failsafe.mvn.plugin.version>3.3.1</failsafe.mvn.plugin.version>
<felix.mvn.plugin.version>5.1.9</felix.mvn.plugin.version>
<findbugs.mvn.plugin.version>3.0.5</findbugs.mvn.plugin.version>
<gfembedded.mvn.plugin.version>5.1</gfembedded.mvn.plugin.version>
<install.mvn.plugin.version>3.1.2</install.mvn.plugin.version>
<istack.mvn.plugin.version>4.2.0</istack.mvn.plugin.version>
- <jar.mvn.plugin.version>3.4.1</jar.mvn.plugin.version>
- <javadoc.mvn.plugin.version>3.6.3</javadoc.mvn.plugin.version>
- <jxr.mvn.plugin.version>3.3.2</jxr.mvn.plugin.version>
+ <jar.mvn.plugin.version>3.4.2</jar.mvn.plugin.version>
+ <javadoc.mvn.plugin.version>3.8.0</javadoc.mvn.plugin.version>
+ <jxr.mvn.plugin.version>3.4.0</jxr.mvn.plugin.version>
<paxexam.mvn.plugin.version>1.2.4</paxexam.mvn.plugin.version>
- <project.info.reports.mvn.plugin.version>3.5.0</project.info.reports.mvn.plugin.version>
+ <project.info.reports.mvn.plugin.version>3.6.2</project.info.reports.mvn.plugin.version>
<resources.mvn.plugin.version>3.3.1</resources.mvn.plugin.version>
- <shade.mvn.plugin.version>3.5.3</shade.mvn.plugin.version>
+ <shade.mvn.plugin.version>3.6.0</shade.mvn.plugin.version>
<source.mvn.plugin.version>3.3.1</source.mvn.plugin.version>
- <surefire.mvn.plugin.version>3.2.5</surefire.mvn.plugin.version>
+ <surefire.mvn.plugin.version>3.3.1</surefire.mvn.plugin.version>
<war.mvn.plugin.version>3.4.0</war.mvn.plugin.version>
<wiremock.mvn.plugin.version>2.11.0</wiremock.mvn.plugin.version>
<xml.mvn.plugin.version>1.1.0</xml.mvn.plugin.version>
@@ -2203,25 +2203,25 @@
<!-- see core-server/src/main/java/jersey/repackaged/asm/.. -->
<asm.version>9.7</asm.version>
<!--required for spring (ext) modules integration -->
- <aspectj.weaver.version>1.9.22</aspectj.weaver.version>
-<!-- <bnd.plugin.version>2.3.6</bnd.plugin.version>-->
+ <aspectj.weaver.version>1.9.22.1</aspectj.weaver.version>
+ <!-- <bnd.plugin.version>2.3.6</bnd.plugin.version>-->
<bouncycastle.version>1.70</bouncycastle.version>
<commons.io.version>2.16.1</commons.io.version>
<commons.codec.version>1.16.1</commons.codec.version>
-<!-- <commons-lang3.version>3.3.2</commons-lang3.version>-->
- <commons.logging.version>1.3.1</commons.logging.version>
+ <!-- <commons-lang3.version>3.3.2</commons-lang3.version>-->
+ <commons.logging.version>1.3.3</commons.logging.version>
<fasterxml.classmate.version>1.7.0</fasterxml.classmate.version>
<felix.eventadmin.version>1.6.4</felix.eventadmin.version>
<felix.framework.security.version>2.8.4</felix.framework.security.version>
<felix.framework.version>7.0.5</felix.framework.version>
<findbugs.glassfish.version>1.7</findbugs.glassfish.version>
- <freemarker.version>2.3.32</freemarker.version>
- <gae.version>2.0.26</gae.version>
- <groovy.version>4.0.21</groovy.version>
- <gson.version>2.10.1</gson.version>
+ <freemarker.version>2.3.33</freemarker.version>
+ <gae.version>2.0.29</gae.version>
+ <groovy.version>4.0.23</groovy.version>
+ <gson.version>2.11.0</gson.version>
<!--versions, extracted here due to maven-enforcer-plugin -->
-<!-- <commons.codec.version>1.15</commons.codec.version>-->
+ <!-- <commons.codec.version>1.15</commons.codec.version>-->
<com.uber.jaeger.version>0.27.0</com.uber.jaeger.version>
<org.codehaus.gmavenplus.version>3.0.2</org.codehaus.gmavenplus.version>
<!-- end of versions extracted here due to maven-enforcer-plugin -->
@@ -2238,14 +2238,14 @@
<helidon.config.11.version>1.4.14</helidon.config.11.version> <!-- JDK 11- support -->
<smallrye.config.version>3.7.1</smallrye.config.version>
- <guava.version>33.1.0-jre</guava.version>
- <hamcrest.version>2.2</hamcrest.version>
+ <guava.version>33.3.0-jre</guava.version>
+ <hamcrest.version>3.0</hamcrest.version>
<xmlunit.version>2.10.0</xmlunit.version>
<hk2.osgi.version>org.glassfish.hk2.*;version="[2.5,4)"</hk2.osgi.version>
<hk2.jvnet.osgi.version>org.jvnet.hk2.*;version="[2.5,4)"</hk2.jvnet.osgi.version>
<httpclient.version>4.5.14</httpclient.version>
<httpclient5.version>5.3.1</httpclient5.version>
- <jackson.version>2.17.1</jackson.version>
+ <jackson.version>2.17.2</jackson.version>
<javassist.version>3.30.2-GA</javassist.version>
<jboss.logging.8.version>3.4.3.Final</jboss.logging.8.version>
<jersey1.version>1.19.3</jersey1.version>
@@ -2257,12 +2257,13 @@
<jmh.version>1.37</jmh.version>
<jmockit.version>1.49</jmockit.version>
<junit4.version>4.13.2</junit4.version>
- <junit5.version>5.10.2</junit5.version>
- <junit-platform-suite.version>1.10.2</junit-platform-suite.version>
+ <junit5.version>5.11.0</junit5.version>
+ <junit5.jdk8.version>5.10.3</junit5.jdk8.version>
+ <junit-platform-suite.version>1.11.0</junit-platform-suite.version>
<kryo.version>4.0.3</kryo.version>
<mockito.version>4.11.0</mockito.version> <!-- CQ 17673 -->
- <mustache.version>0.9.12</mustache.version>
- <netty.version>4.1.109.Final</netty.version>
+ <mustache.version>0.9.14</mustache.version>
+ <netty.version>4.1.112.Final</netty.version>
<opentracing.version>0.33.0</opentracing.version>
<osgi.version>6.0.0</osgi.version>
<osgi.framework.version>1.10.0</osgi.framework.version>
@@ -2276,8 +2277,8 @@
<simple.version>6.0.1</simple.version>
<slf4j.version>2.0.13</slf4j.version>
<spring6.version>6.0.18</spring6.version>
- <testng.version>7.9.0</testng.version>
- <testng6.version>6.9.13.6</testng6.version>
+ <testng.version>7.10.2</testng.version>
+ <testng6.version>6.14.3</testng6.version>
<thymeleaf.version>3.1.2.RELEASE</thymeleaf.version>
<!-- Jakartified, eligible for CQ -->
<weld.version>4.0.3.Final</weld.version>
@@ -2288,7 +2289,7 @@
<xerces.version>2.12.2</xerces.version>
<!-- Graal VM -->
- <graalvm.version>20.3.14</graalvm.version>
+ <graalvm.version>20.3.15</graalvm.version>
<!-- do not need CQs (below this line till the end of version properties)-->
<gf.impl.version>6.2.5</gf.impl.version>
@@ -2323,10 +2324,10 @@
<jaxrs.api.spec.version>3.0</jaxrs.api.spec.version>
<jaxrs.api.impl.version>3.0.0</jaxrs.api.impl.version>
<jetty.osgi.version>org.eclipse.jetty.*;version="[11,15)"</jetty.osgi.version>
- <jetty.version>11.0.22</jetty.version>
+ <jetty.version>11.0.24</jetty.version>
<jetty.tracing.version>11.0.15</jetty.tracing.version> <!-- special version for tracing support tests, applied before JDK 21-->
- <jetty9.version>9.4.54.v20240208</jetty9.version>
- <jetty.plugin.version>11.0.20</jetty.plugin.version>
+ <jetty9.version>9.4.55.v20240627</jetty9.version>
+ <jetty.plugin.version>11.0.24</jetty.plugin.version>
<jetty.servlet.api.25.version>6.1.14</jetty.servlet.api.25.version>
<jsonb.api.version>2.0.0</jsonb.api.version>
<jsonp.ri.version>1.0.5</jsonp.ri.version>
diff --git a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/OutboundMessageContextTest.java b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/OutboundMessageContextTest.java
index bd6e3c5..817170c 100644
--- a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/OutboundMessageContextTest.java
+++ b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/OutboundMessageContextTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2023 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2024 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
@@ -16,6 +16,9 @@
package org.glassfish.jersey.tests.e2e.common.message.internal;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
import java.net.URI;
import java.net.URISyntaxException;
import java.text.ParseException;
@@ -33,10 +36,13 @@
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.ext.RuntimeDelegate;
+import org.glassfish.jersey.io.spi.FlushedCloseable;
import org.glassfish.jersey.message.internal.CookieProvider;
import org.glassfish.jersey.message.internal.OutboundMessageContext;
import org.glassfish.jersey.tests.e2e.common.TestRuntimeDelegate;
+import org.hamcrest.MatcherAssert;
+import org.hamcrest.Matchers;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import static org.hamcrest.Matchers.contains;
@@ -271,4 +277,38 @@
newCtx.setMediaType(MediaType.APPLICATION_XML_TYPE); // new value
Assertions.assertEquals(MediaType.APPLICATION_XML_TYPE, newCtx.getMediaType());
}
+
+ @Test
+ public void OutboundMessageContextFlushTest() throws IOException {
+ FlushCountOutputStream os = new FlushCountOutputStream();
+ OutboundMessageContext ctx = new OutboundMessageContext((Configuration) null);
+ ctx.setEntity("Anything");
+ ctx.setEntityStream(os);
+ os.flush();
+ ctx.close();
+ MatcherAssert.assertThat(os.flushedCnt, Matchers.is(2));
+
+ os = new FlushedClosableOutputStream();
+ ctx = new OutboundMessageContext((Configuration) null);
+ ctx.setEntity("Anything2");
+ ctx.setEntityStream(os);
+ os.flush();
+ ctx.close();
+ MatcherAssert.assertThat(os.flushedCnt, Matchers.is(1));
+ }
+
+ private static class FlushCountOutputStream extends ByteArrayOutputStream {
+ private int flushedCnt = 0;
+
+ @Override
+ public void flush() throws IOException {
+ flushedCnt++;
+ super.flush();
+ }
+ }
+
+ private static class FlushedClosableOutputStream extends FlushCountOutputStream implements FlushedCloseable {
+
+ }
}
+
diff --git a/tests/integration/cdi-integration/cdi-skipping-analyzer/pom.xml b/tests/integration/cdi-integration/cdi-skipping-analyzer/pom.xml
new file mode 100644
index 0000000..073f936
--- /dev/null
+++ b/tests/integration/cdi-integration/cdi-skipping-analyzer/pom.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Copyright (c) 2024 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
+
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <parent>
+ <artifactId>cdi-integration-project</artifactId>
+ <groupId>org.glassfish.jersey.tests.integration.cdi</groupId>
+ <version>3.0.99-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>cdi-skipping-analyzer</artifactId>
+
+ <dependencies>
+ <dependency>
+ <groupId>jakarta.ws.rs</groupId>
+ <artifactId>jakarta.ws.rs-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>jakarta.annotation</groupId>
+ <artifactId>jakarta.annotation-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>jakarta.enterprise</groupId>
+ <artifactId>jakarta.enterprise.cdi-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.glassfish.jersey.ext.cdi</groupId>
+ <artifactId>jersey-cdi1x</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.weld.se</groupId>
+ <artifactId>weld-se-core</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.glassfish.jersey.test-framework</groupId>
+ <artifactId>jersey-test-framework-util</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.glassfish.jersey.test-framework.providers</groupId>
+ <artifactId>jersey-test-framework-provider-bundle</artifactId>
+ <type>pom</type>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.glassfish.jersey.incubator</groupId>
+ <artifactId>jersey-injectless-client</artifactId>
+ <version>${jersey.version}</version>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/tests/integration/cdi-integration/cdi-skipping-analyzer/src/main/java/org/glassfish/jersey/tests/cdi/skippinganalyzer/CdiService.java b/tests/integration/cdi-integration/cdi-skipping-analyzer/src/main/java/org/glassfish/jersey/tests/cdi/skippinganalyzer/CdiService.java
new file mode 100644
index 0000000..44d56d2
--- /dev/null
+++ b/tests/integration/cdi-integration/cdi-skipping-analyzer/src/main/java/org/glassfish/jersey/tests/cdi/skippinganalyzer/CdiService.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2024 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.tests.cdi.skippinganalyzer;
+
+public interface CdiService<T> {
+ void doService(T t);
+}
diff --git a/tests/integration/cdi-integration/cdi-skipping-analyzer/src/main/java/org/glassfish/jersey/tests/cdi/skippinganalyzer/CdiServiceExtension.java b/tests/integration/cdi-integration/cdi-skipping-analyzer/src/main/java/org/glassfish/jersey/tests/cdi/skippinganalyzer/CdiServiceExtension.java
new file mode 100644
index 0000000..a7e5130
--- /dev/null
+++ b/tests/integration/cdi-integration/cdi-skipping-analyzer/src/main/java/org/glassfish/jersey/tests/cdi/skippinganalyzer/CdiServiceExtension.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2024 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.tests.cdi.skippinganalyzer;
+
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.event.Observes;
+import jakarta.enterprise.inject.spi.AfterBeanDiscovery;
+import jakarta.enterprise.inject.spi.Extension;
+import java.io.IOException;
+
+public class CdiServiceExtension implements Extension {
+ public void observe(@Observes AfterBeanDiscovery event) throws IOException, ClassNotFoundException {
+ event.addBean()
+ .addType(CdiService.class)
+ .beanClass(CdiService.class)
+ .scope(ApplicationScoped.class)
+ .createWith(context -> new CdiServiceImpl());
+ }
+
+}
diff --git a/tests/integration/cdi-integration/cdi-skipping-analyzer/src/main/java/org/glassfish/jersey/tests/cdi/skippinganalyzer/CdiServiceImpl.java b/tests/integration/cdi-integration/cdi-skipping-analyzer/src/main/java/org/glassfish/jersey/tests/cdi/skippinganalyzer/CdiServiceImpl.java
new file mode 100644
index 0000000..6406346
--- /dev/null
+++ b/tests/integration/cdi-integration/cdi-skipping-analyzer/src/main/java/org/glassfish/jersey/tests/cdi/skippinganalyzer/CdiServiceImpl.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2024 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.tests.cdi.skippinganalyzer;
+
+import jakarta.enterprise.inject.spi.BeanManager;
+import jakarta.inject.Inject;
+
+public class CdiServiceImpl implements CdiService<StringBuilder> {
+
+ @Inject
+ BeanManager beanManager;
+
+ @Override
+ public void doService(StringBuilder sb) {
+ sb.append(getClass().getSimpleName());
+ }
+}
diff --git a/tests/integration/cdi-integration/cdi-skipping-analyzer/src/main/java/org/glassfish/jersey/tests/cdi/skippinganalyzer/WeldDiscoveredBean.java b/tests/integration/cdi-integration/cdi-skipping-analyzer/src/main/java/org/glassfish/jersey/tests/cdi/skippinganalyzer/WeldDiscoveredBean.java
new file mode 100644
index 0000000..ce459d6
--- /dev/null
+++ b/tests/integration/cdi-integration/cdi-skipping-analyzer/src/main/java/org/glassfish/jersey/tests/cdi/skippinganalyzer/WeldDiscoveredBean.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2024 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.tests.cdi.skippinganalyzer;
+
+import jakarta.enterprise.context.ApplicationScoped;
+
+@ApplicationScoped
+public class WeldDiscoveredBean {
+
+}
diff --git a/tests/integration/cdi-integration/cdi-skipping-analyzer/src/main/resources/META-INF/beans.xml b/tests/integration/cdi-integration/cdi-skipping-analyzer/src/main/resources/META-INF/beans.xml
new file mode 100644
index 0000000..56ad04f
--- /dev/null
+++ b/tests/integration/cdi-integration/cdi-skipping-analyzer/src/main/resources/META-INF/beans.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Copyright (c) 2024 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
+
+-->
+
+
+<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_2_0.xsd"
+ bean-discovery-mode="annotated" version="2.0">
+</beans>
\ No newline at end of file
diff --git a/tests/integration/cdi-integration/cdi-skipping-analyzer/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension b/tests/integration/cdi-integration/cdi-skipping-analyzer/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
new file mode 100644
index 0000000..7bfc71c
--- /dev/null
+++ b/tests/integration/cdi-integration/cdi-skipping-analyzer/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
@@ -0,0 +1 @@
+org.glassfish.jersey.tests.cdi.skippinganalyzer.CdiServiceExtension
\ No newline at end of file
diff --git a/tests/integration/cdi-integration/cdi-skipping-analyzer/src/main/webapp/WEB-INF/web.xml b/tests/integration/cdi-integration/cdi-skipping-analyzer/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..e038a3a
--- /dev/null
+++ b/tests/integration/cdi-integration/cdi-skipping-analyzer/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Copyright (c) 2024 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
+
+-->
+
+<web-app xmlns="http://java.sun.com/xml/ns/javaee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
+ version="3.0">
+</web-app>
diff --git a/tests/integration/cdi-integration/cdi-skipping-analyzer/src/test/java/org/glassfish/jersey/tests/cdi/skippinganalyzer/SkippingAnalyzerTest.java b/tests/integration/cdi-integration/cdi-skipping-analyzer/src/test/java/org/glassfish/jersey/tests/cdi/skippinganalyzer/SkippingAnalyzerTest.java
new file mode 100644
index 0000000..698e496
--- /dev/null
+++ b/tests/integration/cdi-integration/cdi-skipping-analyzer/src/test/java/org/glassfish/jersey/tests/cdi/skippinganalyzer/SkippingAnalyzerTest.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2024 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.tests.cdi.skippinganalyzer;
+
+import org.glassfish.hk2.api.ClassAnalyzer;
+import org.glassfish.jersey.ext.cdi1x.internal.CdiComponentProvider;
+import org.glassfish.jersey.ext.cdi1x.internal.InjecteeSkippingAnalyzer;
+import org.glassfish.jersey.inject.hk2.Hk2InjectionManagerFactory;
+import org.glassfish.jersey.internal.inject.InjectionManager;
+import org.glassfish.jersey.internal.inject.Injections;
+import org.hamcrest.MatcherAssert;
+import org.hamcrest.Matchers;
+import org.jboss.weld.environment.se.Weld;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assumptions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import jakarta.enterprise.inject.spi.BeanManager;
+import jakarta.enterprise.inject.spi.CDI;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.Map;
+import java.util.Set;
+
+public class SkippingAnalyzerTest {
+ private Weld weld;
+
+ @BeforeEach
+ public void setup() {
+ Assumptions.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
+ }
+
+ @BeforeEach
+ public void setUp() throws Exception {
+ if (Hk2InjectionManagerFactory.isImmediateStrategy()) {
+ weld = new Weld();
+ weld.initialize();
+ }
+ }
+
+ @AfterEach
+ public void tearDown() throws Exception {
+ weld.shutdown();
+ }
+
+ @Test
+ public void testInjecteeSkippingAnalyzerWithZeroFieldsToSkip() throws Exception {
+ BeanManager beanManager = CDI.current().getBeanManager();
+ CdiComponentProvider provider = beanManager.getExtension(CdiComponentProvider.class);
+ Method method = provider.getClass().getDeclaredMethod("getFieldsToSkip");
+ method.setAccessible(true);
+ Map fieldMap = (Map) method.invoke(provider);
+ MatcherAssert.assertThat(0, Matchers.is(fieldMap.size()));
+
+ InjectionManager injectionManager = Injections.createInjectionManager();
+ provider.initialize(injectionManager);
+ injectionManager.completeRegistration();
+ ClassAnalyzer analyzer = injectionManager.getInstance(ClassAnalyzer.class, CdiComponentProvider.CDI_CLASS_ANALYZER);
+ MatcherAssert.assertThat(InjecteeSkippingAnalyzer.class, Matchers.is(analyzer.getClass()));
+
+ Set<Field> fieldSet = analyzer.getFields(CdiServiceImpl.class);
+ MatcherAssert.assertThat(0, Matchers.is(fieldSet.size()));
+ }
+}
diff --git a/tests/integration/cdi-integration/pom.xml b/tests/integration/cdi-integration/pom.xml
index 0afc99f..b054f69 100644
--- a/tests/integration/cdi-integration/pom.xml
+++ b/tests/integration/cdi-integration/pom.xml
@@ -43,6 +43,7 @@
<module>cdi-multipart-webapp</module>
<module>cdi-resource-with-at-context</module>
<module>cdi-singleton</module>
+ <module>cdi-skipping-analyzer</module>
<module>cdi-test-webapp</module>
<module>cdi-with-jersey-injection-custom-cfg-webapp</module>
<module>cdi-with-jersey-injection-custom-hk2-banned-webapp</module>