warn less (just once for all clients) about missing providers Signed-off-by: jansupol <jan.supol@oracle.com>
diff --git a/core-common/src/main/java/org/glassfish/jersey/message/internal/MessagingBinders.java b/core-common/src/main/java/org/glassfish/jersey/message/internal/MessagingBinders.java index 3df2ae9..95bb518 100644 --- a/core-common/src/main/java/org/glassfish/jersey/message/internal/MessagingBinders.java +++ b/core-common/src/main/java/org/glassfish/jersey/message/internal/MessagingBinders.java
@@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2022 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 @@ -17,11 +17,13 @@ package org.glassfish.jersey.message.internal; import java.security.AccessController; +import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Locale; import java.util.Map; import java.util.Set; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.logging.Logger; import javax.ws.rs.RuntimeType; @@ -48,6 +50,14 @@ public final class MessagingBinders { private static final Logger LOGGER = Logger.getLogger(MessagingBinders.class.getName()); + private static final Map<EnabledProvidersBinder.Provider, AtomicBoolean> warningMap; + + static { + warningMap = new HashMap<>(); + for (EnabledProvidersBinder.Provider provider : EnabledProvidersBinder.Provider.values()) { + warningMap.put(provider, new AtomicBoolean(false)); + } + } /** * Prevents instantiation. @@ -223,21 +233,23 @@ } providerBinder.bind(binder, provider); } else { - switch (provider) { - case DOMSOURCE: - case SAXSOURCE: - case STREAMSOURCE: - LOGGER.warning(LocalizationMessages.DEPENDENT_CLASS_OF_DEFAULT_PROVIDER_NOT_FOUND(provider.className, - "MessageBodyReader<" + provider.className + ">") - ); - break; - case DATASOURCE: - case RENDEREDIMAGE: - case SOURCE: - LOGGER.warning(LocalizationMessages.DEPENDENT_CLASS_OF_DEFAULT_PROVIDER_NOT_FOUND(provider.className, - "MessageBodyWriter<" + provider.className + ">") - ); - break; + if (warningMap.get(provider).compareAndSet(false, true)) { + switch (provider) { + case DOMSOURCE: + case SAXSOURCE: + case STREAMSOURCE: + LOGGER.warning(LocalizationMessages.DEPENDENT_CLASS_OF_DEFAULT_PROVIDER_NOT_FOUND( + provider.className, "MessageBodyReader<" + provider.className + ">") + ); + break; + case DATASOURCE: + case RENDEREDIMAGE: + case SOURCE: + LOGGER.warning(LocalizationMessages.DEPENDENT_CLASS_OF_DEFAULT_PROVIDER_NOT_FOUND( + provider.className, "MessageBodyWriter<" + provider.className + ">") + ); + break; + } } } }