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;
+ }
}
}
}