Ensure classpath checks can be evaluated at build-time

Closes gh-29352
This commit is contained in:
Sébastien Deleuze 2022-10-19 10:44:13 +02:00
parent 6b6cf1b4a2
commit aa776e40f9
4 changed files with 25 additions and 8 deletions

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2020 the original author or authors. * Copyright 2002-2022 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -67,9 +67,12 @@ public class ProtobufMessageConverter extends AbstractMessageConverter {
*/ */
public static final MimeType PROTOBUF = new MimeType("application", "x-protobuf", DEFAULT_CHARSET); public static final MimeType PROTOBUF = new MimeType("application", "x-protobuf", DEFAULT_CHARSET);
private static final boolean protobufJsonFormatPresent =
ClassUtils.isPresent("com.google.protobuf.util.JsonFormat", ProtobufMessageConverter.class.getClassLoader());
private static final Map<Class<?>, Method> methodCache = new ConcurrentReferenceHashMap<>(); private static final Map<Class<?>, Method> methodCache = new ConcurrentReferenceHashMap<>();
final ExtensionRegistry extensionRegistry; final ExtensionRegistry extensionRegistry;
@Nullable @Nullable
@ -98,7 +101,7 @@ public class ProtobufMessageConverter extends AbstractMessageConverter {
if (formatSupport != null) { if (formatSupport != null) {
this.protobufFormatSupport = formatSupport; this.protobufFormatSupport = formatSupport;
} }
else if (ClassUtils.isPresent("com.google.protobuf.util.JsonFormat", getClass().getClassLoader())) { else if (protobufJsonFormatPresent) {
this.protobufFormatSupport = new ProtobufJavaUtilSupport(null, null); this.protobufFormatSupport = new ProtobufJavaUtilSupport(null, null);
} }
else { else {

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2021 the original author or authors. * Copyright 2002-2022 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -105,9 +105,19 @@ public class ProtobufHttpMessageConverter extends AbstractHttpMessageConverter<M
*/ */
public static final String X_PROTOBUF_MESSAGE_HEADER = "X-Protobuf-Message"; public static final String X_PROTOBUF_MESSAGE_HEADER = "X-Protobuf-Message";
private static final boolean protobufFormatFactoryPresent;
private static final boolean protobufJsonFormatPresent;
private static final Map<Class<?>, Method> methodCache = new ConcurrentReferenceHashMap<>(); private static final Map<Class<?>, Method> methodCache = new ConcurrentReferenceHashMap<>();
static {
ClassLoader classLoader = ProtobufHttpMessageConverter.class.getClassLoader();
protobufFormatFactoryPresent = ClassUtils.isPresent("com.googlecode.protobuf.format.FormatFactory", classLoader);
protobufJsonFormatPresent = ClassUtils.isPresent("com.google.protobuf.util.JsonFormat", classLoader);
}
final ExtensionRegistry extensionRegistry; final ExtensionRegistry extensionRegistry;
@Nullable @Nullable
@ -136,10 +146,10 @@ public class ProtobufHttpMessageConverter extends AbstractHttpMessageConverter<M
if (formatSupport != null) { if (formatSupport != null) {
this.protobufFormatSupport = formatSupport; this.protobufFormatSupport = formatSupport;
} }
else if (ClassUtils.isPresent("com.googlecode.protobuf.format.FormatFactory", getClass().getClassLoader())) { else if (protobufFormatFactoryPresent) {
this.protobufFormatSupport = new ProtobufJavaFormatSupport(); this.protobufFormatSupport = new ProtobufJavaFormatSupport();
} }
else if (ClassUtils.isPresent("com.google.protobuf.util.JsonFormat", getClass().getClassLoader())) { else if (protobufJsonFormatPresent) {
this.protobufFormatSupport = new ProtobufJavaUtilSupport(null, null); this.protobufFormatSupport = new ProtobufJavaUtilSupport(null, null);
} }
else { else {

View File

@ -85,6 +85,10 @@ import org.springframework.web.server.i18n.LocaleContextResolver;
*/ */
public class WebFluxConfigurationSupport implements ApplicationContextAware { public class WebFluxConfigurationSupport implements ApplicationContextAware {
private static final boolean jakartaValidatorPresent =
ClassUtils.isPresent("jakarta.validation.Validator", WebFluxConfigurationSupport.class.getClassLoader());
@Nullable @Nullable
private Map<String, CorsConfiguration> corsConfigurations; private Map<String, CorsConfiguration> corsConfigurations;
@ -384,7 +388,7 @@ public class WebFluxConfigurationSupport implements ApplicationContextAware {
public Validator webFluxValidator() { public Validator webFluxValidator() {
Validator validator = getValidator(); Validator validator = getValidator();
if (validator == null) { if (validator == null) {
if (ClassUtils.isPresent("jakarta.validation.Validator", getClass().getClassLoader())) { if (jakartaValidatorPresent) {
try { try {
validator = new OptionalValidatorFactoryBean(); validator = new OptionalValidatorFactoryBean();
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2013 the original author or authors. * Copyright 2002-2022 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -28,7 +28,7 @@ import org.springframework.util.ClassUtils;
*/ */
public class WebSocketNamespaceHandler extends NamespaceHandlerSupport { public class WebSocketNamespaceHandler extends NamespaceHandlerSupport {
private static boolean isSpringMessagingPresent = ClassUtils.isPresent( private static final boolean isSpringMessagingPresent = ClassUtils.isPresent(
"org.springframework.messaging.Message", WebSocketNamespaceHandler.class.getClassLoader()); "org.springframework.messaging.Message", WebSocketNamespaceHandler.class.getClassLoader());