diff --git a/NOTICE.md b/NOTICE.md index 2818e63200..350c730582 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 @@ Bootstrap v3.3.7 * 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 90d138d06e..306e336cef 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 @@ default HttpURLConnection getConnection(URL url, Proxy proxy) throws IOException private static class DefaultConnectionFactory implements ConnectionFactory { + private final ConcurrentHashMap 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/ApplicationSupplier.java b/core-common/src/main/java/org/glassfish/jersey/ApplicationSupplier.java index 1eb9ca5c72..6ef17b9718 100644 --- a/core-common/src/main/java/org/glassfish/jersey/ApplicationSupplier.java +++ b/core-common/src/main/java/org/glassfish/jersey/ApplicationSupplier.java @@ -17,7 +17,7 @@ package org.glassfish.jersey; -import javax.ws.rs.core.Application; +import jakarta.ws.rs.core.Application; /** * Implementation of this interface is capable of returning {@link Application}. 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 32e2640e9e..4765056bbf 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 @@ public int size() { * @return union view of given sets. */ public static Set setUnionView(final Set set1, final Set set2) { - checkNotNull(set1, "set1"); - checkNotNull(set2, "set2"); + Objects.requireNonNull(set1, "set1"); + Objects.requireNonNull(set2, "set2"); return new AbstractSet() { @Override @@ -220,18 +219,19 @@ private Set getUnion(Set set1, Set set2) { } /** - * 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. *

* View is updated whenever any of the provided set changes. * * @param set1 first set. * @param set2 second set. * @param set item type. - * @return union view of given sets. + * @return view that is a difference of given sets. */ public static Set setDiffView(final Set set1, final Set set2) { - checkNotNull(set1, "set1"); - checkNotNull(set2, "set2"); + Objects.requireNonNull(set1, "set1"); + Objects.requireNonNull(set2, "set2"); return new AbstractSet() { @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 0000000000..f913ae650d --- /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 0000000000..12aa7144d8 --- /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. + * + *

+ * Usable by {@link javax.ws.rs.client.ClientRequestContext#setEntityStream(OutputStream)}. + * Usable by {@link javax.ws.rs.container.ContainerResponseContext#setEntityStream(OutputStream)}. + *

+ * + *

+ * 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. + *

+ */ +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. + * + *

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 + * mark 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 0000000000..7a70945f25 --- /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 c69f173f9a..b1b7745bbd 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 @@ public void close() { 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 034205c6f3..82590e4713 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 @@ aopalliance Version 1 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 @@ CDI API Version 3.0 * 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 0b5f9f2db1..605b4d68b2 100644 --- a/examples/extended-wadl-webapp/pom.xml +++ b/examples/extended-wadl-webapp/pom.xml @@ -108,8 +108,8 @@ org.slf4j - slf4j-log4j12 - 2.0.13 + slf4j-reload4j + ${slf4j.version} test diff --git a/examples/osgi-http-service/functional-test/pom.xml b/examples/osgi-http-service/functional-test/pom.xml index 05b2447c27..762ba76645 100644 --- a/examples/osgi-http-service/functional-test/pom.xml +++ b/examples/osgi-http-service/functional-test/pom.xml @@ -144,8 +144,8 @@ org.slf4j - slf4j-log4j12 - 2.0.13 + slf4j-reload4j + ${slf4j.version} test diff --git a/examples/servlet3-webapp/pom.xml b/examples/servlet3-webapp/pom.xml index 3c6bd334ac..1e2a7dbee2 100644 --- a/examples/servlet3-webapp/pom.xml +++ b/examples/servlet3-webapp/pom.xml @@ -112,6 +112,15 @@ + + jdk8_tests + + 1.8 + + + ${junit5.jdk8.version} + + pre-release 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 e5fd3e8857..6376f934ff 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 @@ public Boolean apply(final Class clazz) { private volatile Map, Set> methodsToSkip = new HashMap<>(); private volatile Map, Set> fieldsToSkip = new HashMap<>(); + private boolean initialized = false; + public CdiComponentProvider() { customHk2TypesProvider = CdiUtil.lookupService(Hk2CustomBoundTypesProvider.class); injectionManagerStore = CdiUtil.createHk2InjectionManagerStore(); @@ -154,7 +155,7 @@ public void initialize(final InjectionManager injectionManager) { 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 @@ public void initialize(final InjectionManager injectionManager) { bindHk2ClassAnalyzer(); LOGGER.config(LocalizationMessages.CDI_PROVIDER_INITIALIZED()); + initialized = true; } } } @Override public boolean bind(final Class clazz, final Set> 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 @@ private void bindHk2ClassAnalyzer() { 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/incubator/cdi-inject-weld/src/main/java/org/glassfish/jersey/inject/weld/internal/bean/BeanHelper.java b/incubator/cdi-inject-weld/src/main/java/org/glassfish/jersey/inject/weld/internal/bean/BeanHelper.java index 0eb70c1a87..3e3da0940f 100644 --- a/incubator/cdi-inject-weld/src/main/java/org/glassfish/jersey/inject/weld/internal/bean/BeanHelper.java +++ b/incubator/cdi-inject-weld/src/main/java/org/glassfish/jersey/inject/weld/internal/bean/BeanHelper.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 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 diff --git a/incubator/cdi-inject-weld/src/main/java/org/glassfish/jersey/inject/weld/internal/bean/SupplierThreadScopeClassBean.java b/incubator/cdi-inject-weld/src/main/java/org/glassfish/jersey/inject/weld/internal/bean/SupplierThreadScopeClassBean.java index 0326efe78a..fe3e8b4ebd 100644 --- a/incubator/cdi-inject-weld/src/main/java/org/glassfish/jersey/inject/weld/internal/bean/SupplierThreadScopeClassBean.java +++ b/incubator/cdi-inject-weld/src/main/java/org/glassfish/jersey/inject/weld/internal/bean/SupplierThreadScopeClassBean.java @@ -25,17 +25,17 @@ import org.jboss.weld.bean.proxy.ProxyFactory; import org.jboss.weld.manager.BeanManagerImpl; -import javax.enterprise.context.Dependent; -import javax.enterprise.context.spi.CreationalContext; -import javax.ws.rs.RuntimeType; +import jakarta.enterprise.context.Dependent; +import jakarta.enterprise.context.spi.CreationalContext; +import jakarta.ws.rs.RuntimeType; import java.lang.annotation.Annotation; import java.util.concurrent.atomic.AtomicReference; import java.util.function.Supplier; /** - * Creates an implementation of {@link javax.enterprise.inject.spi.Bean} interface using Jersey's {@link SupplierInstanceBinding}. - * Binding provides the information about the bean also called {@link javax.enterprise.inject.spi.BeanAttributes} information. + * Creates an implementation of {@link jakarta.enterprise.inject.spi.Bean} interface using Jersey's {@link SupplierInstanceBinding}. + * Binding provides the information about the bean also called {@link jakarta.enterprise.inject.spi.BeanAttributes} information. * The {@code Bean} does not use {@link org.glassfish.jersey.inject.weld.internal.injector.JerseyInjectionTarget} because serves already * created proxy, therefore the create operation just return provided instance without any other contextual operation * (produce, inject, destroy). diff --git a/incubator/cdi-inject-weld/src/main/java/org/glassfish/jersey/inject/weld/internal/bean/ThreadScopeBeanInstance.java b/incubator/cdi-inject-weld/src/main/java/org/glassfish/jersey/inject/weld/internal/bean/ThreadScopeBeanInstance.java index 30d18964ab..73ac6514aa 100644 --- a/incubator/cdi-inject-weld/src/main/java/org/glassfish/jersey/inject/weld/internal/bean/ThreadScopeBeanInstance.java +++ b/incubator/cdi-inject-weld/src/main/java/org/glassfish/jersey/inject/weld/internal/bean/ThreadScopeBeanInstance.java @@ -19,8 +19,8 @@ import org.jboss.weld.bean.StringBeanIdentifier; import org.jboss.weld.bean.proxy.ContextBeanInstance; -import javax.enterprise.inject.spi.Bean; -import javax.enterprise.inject.spi.PassivationCapable; +import jakarta.enterprise.inject.spi.Bean; +import jakarta.enterprise.inject.spi.PassivationCapable; import java.lang.reflect.Method; import java.util.WeakHashMap; import java.util.function.Supplier; diff --git a/inject/cdi2-se/src/main/java/org/glassfish/jersey/inject/cdi/se/bean/BeanHelper.java b/inject/cdi2-se/src/main/java/org/glassfish/jersey/inject/cdi/se/bean/BeanHelper.java index 68b97f1437..aff3f91084 100644 --- a/inject/cdi2-se/src/main/java/org/glassfish/jersey/inject/cdi/se/bean/BeanHelper.java +++ b/inject/cdi2-se/src/main/java/org/glassfish/jersey/inject/cdi/se/bean/BeanHelper.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 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 diff --git a/inject/cdi2-se/src/main/java/org/glassfish/jersey/inject/cdi/se/bean/SupplierThreadScopeBean.java b/inject/cdi2-se/src/main/java/org/glassfish/jersey/inject/cdi/se/bean/SupplierThreadScopeBean.java index c7ee09b079..b95ae0a539 100644 --- a/inject/cdi2-se/src/main/java/org/glassfish/jersey/inject/cdi/se/bean/SupplierThreadScopeBean.java +++ b/inject/cdi2-se/src/main/java/org/glassfish/jersey/inject/cdi/se/bean/SupplierThreadScopeBean.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, 2020 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 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 @@ -20,8 +20,6 @@ import jakarta.enterprise.context.Dependent; import jakarta.enterprise.context.spi.CreationalContext; -import jakarta.enterprise.inject.spi.Bean; -import jakarta.enterprise.inject.spi.PassivationCapable; import org.glassfish.jersey.internal.inject.SupplierInstanceBinding; diff --git a/inject/cdi2-se/src/main/java/org/glassfish/jersey/inject/cdi/se/bean/SupplierThreadScopeClassBean.java b/inject/cdi2-se/src/main/java/org/glassfish/jersey/inject/cdi/se/bean/SupplierThreadScopeClassBean.java index 28e69e7243..698bfb034d 100644 --- a/inject/cdi2-se/src/main/java/org/glassfish/jersey/inject/cdi/se/bean/SupplierThreadScopeClassBean.java +++ b/inject/cdi2-se/src/main/java/org/glassfish/jersey/inject/cdi/se/bean/SupplierThreadScopeClassBean.java @@ -20,8 +20,8 @@ import java.util.concurrent.atomic.AtomicReference; import java.util.function.Supplier; -import javax.enterprise.context.Dependent; -import javax.enterprise.context.spi.CreationalContext; +import jakarta.enterprise.context.Dependent; +import jakarta.enterprise.context.spi.CreationalContext; import org.glassfish.jersey.internal.inject.SupplierClassBinding; import org.glassfish.jersey.internal.inject.SupplierInstanceBinding; diff --git a/inject/cdi2-se/src/main/java/org/glassfish/jersey/inject/cdi/se/bean/ThreadScopeBeanInstance.java b/inject/cdi2-se/src/main/java/org/glassfish/jersey/inject/cdi/se/bean/ThreadScopeBeanInstance.java index 3067386e45..a2009609f2 100644 --- a/inject/cdi2-se/src/main/java/org/glassfish/jersey/inject/cdi/se/bean/ThreadScopeBeanInstance.java +++ b/inject/cdi2-se/src/main/java/org/glassfish/jersey/inject/cdi/se/bean/ThreadScopeBeanInstance.java @@ -23,8 +23,8 @@ import java.util.WeakHashMap; import java.util.function.Supplier; -import javax.enterprise.inject.spi.Bean; -import javax.enterprise.inject.spi.PassivationCapable; +import jakarta.enterprise.inject.spi.Bean; +import jakarta.enterprise.inject.spi.PassivationCapable; /** * {@link org.glassfish.jersey.internal.inject.PerThread} scope bean instance used from diff --git a/inject/cdi2-se/src/test/java/org/glassfish/jersey/inject/cdi/se/CzechGreeting.java b/inject/cdi2-se/src/test/java/org/glassfish/jersey/inject/cdi/se/CzechGreeting.java index aa0f4f4d61..3f4f9245a6 100644 --- a/inject/cdi2-se/src/test/java/org/glassfish/jersey/inject/cdi/se/CzechGreeting.java +++ b/inject/cdi2-se/src/test/java/org/glassfish/jersey/inject/cdi/se/CzechGreeting.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, 2020 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 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 diff --git a/media/json-binding/src/main/java/org/glassfish/jersey/jsonb/JsonBindingFeature.java b/media/json-binding/src/main/java/org/glassfish/jersey/jsonb/JsonBindingFeature.java index 39e93e177e..a41afb0956 100644 --- a/media/json-binding/src/main/java/org/glassfish/jersey/jsonb/JsonBindingFeature.java +++ b/media/json-binding/src/main/java/org/glassfish/jersey/jsonb/JsonBindingFeature.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, 2020 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 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,8 @@ package org.glassfish.jersey.jsonb; +import jakarta.ws.rs.RuntimeType; +import jakarta.ws.rs.core.Application; import jakarta.ws.rs.core.Configuration; import jakarta.ws.rs.core.Feature; import jakarta.ws.rs.core.FeatureContext; diff --git a/media/json-binding/src/test/java/org/glassfish/jersey/jsonb/internal/JsonbDisabledTest.java b/media/json-binding/src/test/java/org/glassfish/jersey/jsonb/internal/JsonbDisabledTest.java index c2b63779d6..7dc8a3f6a6 100644 --- a/media/json-binding/src/test/java/org/glassfish/jersey/jsonb/internal/JsonbDisabledTest.java +++ b/media/json-binding/src/test/java/org/glassfish/jersey/jsonb/internal/JsonbDisabledTest.java @@ -27,9 +27,9 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import javax.ws.rs.RuntimeType; -import javax.ws.rs.core.Application; -import javax.ws.rs.core.FeatureContext; +import jakarta.ws.rs.RuntimeType; +import jakarta.ws.rs.core.Application; +import jakarta.ws.rs.core.FeatureContext; import java.lang.reflect.Proxy; import java.util.concurrent.atomic.AtomicReference; diff --git a/media/json-gson/pom.xml b/media/json-gson/pom.xml index cf0d7e655b..a57df78910 100644 --- a/media/json-gson/pom.xml +++ b/media/json-gson/pom.xml @@ -71,6 +71,12 @@ com.google.code.gson gson + + + com.google.errorprone + error_prone_annotations + + org.junit.jupiter 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 5d328da992..56b1bf6480 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 4edecfc595..9440229038 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 @@ The project maintains the following source code repositories: ## 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 b37f5c03e9..e42473c3a3 100644 --- a/pom.xml +++ b/pom.xml @@ -2155,13 +2155,13 @@ 3.1.0 1.10.14 3.7.1 - 3.3.2 - 3.4.1 - 3.2.0 - 3.5.0 + 3.4.0 + 3.5.0 + 3.4.1 + 3.6.0 3.2.0 - 3.3.1 - 10.16.0 + 3.4.0 + 10.17.0 3.13.0 3.9.0 - 2.8.0 - 3.6.1 + 2.8.1 + 3.7.1 3.1.2 3.3.0 - 3.2.5 + 3.3.1 5.1.9 3.0.5 5.1 3.1.2 4.2.0 - 3.4.1 - 3.6.3 - 3.3.2 + 3.4.2 + 3.8.0 + 3.4.0 1.2.4 - 3.5.0 + 3.6.2 3.3.1 - 3.5.3 + 3.6.0 3.3.1 - 3.2.5 + 3.3.1 3.4.0 2.11.0 1.1.0 @@ -2203,22 +2203,22 @@ 9.7 - 1.9.22 + 1.9.22.1 1.70 2.16.1 1.16.1 - 1.3.1 + 1.3.3 1.7.0 1.6.4 2.8.4 7.0.5 1.7 - 2.3.32 - 2.0.26 - 4.0.21 - 2.10.1 + 2.3.33 + 2.0.29 + 4.0.23 + 2.11.0 @@ -2238,14 +2238,14 @@ 1.4.14 3.7.1 - 33.1.0-jre - 2.2 + 33.3.0-jre + 3.0 2.10.0 org.glassfish.hk2.*;version="[2.5,4)" org.jvnet.hk2.*;version="[2.5,4)" 4.5.14 5.3.1 - 2.17.1 + 2.17.2 3.30.2-GA 3.4.3.Final 1.19.3 @@ -2257,12 +2257,13 @@ 1.37 1.49 4.13.2 - 5.10.2 - 1.10.2 + 5.11.0 + 5.10.3 + 1.11.0 4.0.3 4.11.0 - 0.9.12 - 4.1.109.Final + 0.9.14 + 4.1.112.Final 0.33.0 6.0.0 1.10.0 @@ -2276,8 +2277,8 @@ 6.0.1 2.0.13 6.0.18 - 7.9.0 - 6.9.13.6 + 7.10.2 + 6.14.3 3.1.2.RELEASE 4.0.3.Final @@ -2288,7 +2289,7 @@ 2.12.2 - 20.3.14 + 20.3.15 6.2.5 @@ -2323,10 +2324,10 @@ 3.0 3.0.0 org.eclipse.jetty.*;version="[11,15)" - 11.0.22 + 11.0.24 11.0.15 - 9.4.54.v20240208 - 11.0.20 + 9.4.55.v20240627 + 11.0.24 6.1.14 2.0.0 1.0.5 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 bd6e3c531a..817170c43b 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 @@ public void testCopyConstructor() { 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/e2e/src/test/java/org/glassfish/jersey/tests/e2e/inject/SingleRequestScopeInjectionTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/inject/SingleRequestScopeInjectionTest.java index 2175c65e3d..2c4cc35cbb 100644 --- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/inject/SingleRequestScopeInjectionTest.java +++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/inject/SingleRequestScopeInjectionTest.java @@ -38,7 +38,6 @@ import jakarta.ws.rs.core.GenericType; import java.io.IOException; -import java.util.concurrent.atomic.AtomicInteger; import static org.junit.jupiter.api.Assertions.assertEquals; 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 0000000000..073f936a60 --- /dev/null +++ b/tests/integration/cdi-integration/cdi-skipping-analyzer/pom.xml @@ -0,0 +1,71 @@ + + + + + + cdi-integration-project + org.glassfish.jersey.tests.integration.cdi + 3.0.99-SNAPSHOT + + 4.0.0 + + cdi-skipping-analyzer + + + + jakarta.ws.rs + jakarta.ws.rs-api + + + jakarta.annotation + jakarta.annotation-api + + + jakarta.enterprise + jakarta.enterprise.cdi-api + + + org.glassfish.jersey.ext.cdi + jersey-cdi1x + + + org.jboss.weld.se + weld-se-core + test + + + org.glassfish.jersey.test-framework + jersey-test-framework-util + test + + + org.glassfish.jersey.test-framework.providers + jersey-test-framework-provider-bundle + pom + test + + + org.glassfish.jersey.incubator + jersey-injectless-client + ${jersey.version} + + + 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 0000000000..44d56d29dc --- /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 { + 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 0000000000..a7e5130ceb --- /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 0000000000..640634688b --- /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 { + + @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 0000000000..ce459d6449 --- /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 0000000000..56ad04f3c1 --- /dev/null +++ b/tests/integration/cdi-integration/cdi-skipping-analyzer/src/main/resources/META-INF/beans.xml @@ -0,0 +1,24 @@ + + + + + + \ 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 0000000000..7bfc71c13c --- /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 0000000000..e038a3ab7f --- /dev/null +++ b/tests/integration/cdi-integration/cdi-skipping-analyzer/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,24 @@ + + + + + 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 0000000000..698e496edc --- /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 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 0afc99f1d9..b054f69833 100644 --- a/tests/integration/cdi-integration/pom.xml +++ b/tests/integration/cdi-integration/pom.xml @@ -43,6 +43,7 @@ cdi-multipart-webapp cdi-resource-with-at-context cdi-singleton + cdi-skipping-analyzer cdi-test-webapp cdi-with-jersey-injection-custom-cfg-webapp cdi-with-jersey-injection-custom-hk2-banned-webapp