From 7189f426ed68d48e2064135f377d8f8002b17a42 Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Thu, 11 Jan 2018 11:23:20 +0100 Subject: [PATCH] Create CloudFoundry-specific EndpointWebExtension Closes gh-11428 --- .../CloudFoundryEndpointFilter.java | 7 +-- .../CloudFoundryEndpointWebExtension.java | 48 +++++++++++++++++++ ...dryReactiveHealthEndpointWebExtension.java | 6 +-- ...loudFoundryHealthEndpointWebExtension.java | 6 +-- 4 files changed, 58 insertions(+), 9 deletions(-) create mode 100644 spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundryEndpointWebExtension.java diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundryEndpointFilter.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundryEndpointFilter.java index 8cdf608b6c7..fb4d5ea4ca1 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundryEndpointFilter.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundryEndpointFilter.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2017 the original author or authors. + * Copyright 2012-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -27,10 +27,11 @@ import org.springframework.boot.actuate.endpoint.web.WebOperation; * * @author Madhura Bhave */ -public class CloudFoundryEndpointFilter implements EndpointFilter { +class CloudFoundryEndpointFilter implements EndpointFilter { @Override - public boolean match(EndpointInfo info, EndpointDiscoverer discoverer) { + public boolean match(EndpointInfo info, + EndpointDiscoverer discoverer) { return (discoverer instanceof CloudFoundryWebAnnotationEndpointDiscoverer); } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundryEndpointWebExtension.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundryEndpointWebExtension.java new file mode 100644 index 00000000000..037e4272ad4 --- /dev/null +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundryEndpointWebExtension.java @@ -0,0 +1,48 @@ +/* + * Copyright 2012-2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.cloudfoundry; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.annotation.EndpointExtension; +import org.springframework.core.annotation.AliasFor; + +/** + * Identifies a type as being a CloudFoundry-specific extension of an {@link Endpoint}. + * + * @author Stephane Nicoll + * @since 2.0.0 + */ +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@EndpointExtension(filter = CloudFoundryEndpointFilter.class) +public @interface CloudFoundryEndpointWebExtension { + + /** + * The {@link Endpoint endpoint} class to which this Web extension relates. + * @return the endpoint class + */ + @AliasFor(annotation = EndpointExtension.class) + Class endpoint(); + +} diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/reactive/CloudFoundryReactiveHealthEndpointWebExtension.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/reactive/CloudFoundryReactiveHealthEndpointWebExtension.java index f50baded5d0..2cc5faf1806 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/reactive/CloudFoundryReactiveHealthEndpointWebExtension.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/reactive/CloudFoundryReactiveHealthEndpointWebExtension.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2017 the original author or authors. + * Copyright 2012-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,7 +18,7 @@ package org.springframework.boot.actuate.autoconfigure.cloudfoundry.reactive; import reactor.core.publisher.Mono; -import org.springframework.boot.actuate.autoconfigure.cloudfoundry.CloudFoundryEndpointFilter; +import org.springframework.boot.actuate.autoconfigure.cloudfoundry.CloudFoundryEndpointWebExtension; import org.springframework.boot.actuate.endpoint.annotation.EndpointExtension; import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; import org.springframework.boot.actuate.endpoint.web.WebEndpointResponse; @@ -33,7 +33,7 @@ import org.springframework.boot.actuate.health.ReactiveHealthEndpointWebExtensio * @author Madhura Bhave * @since 2.0.0 */ -@EndpointExtension(filter = CloudFoundryEndpointFilter.class, endpoint = HealthEndpoint.class) +@CloudFoundryEndpointWebExtension(endpoint = HealthEndpoint.class) public class CloudFoundryReactiveHealthEndpointWebExtension { private final ReactiveHealthEndpointWebExtension delegate; diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/servlet/CloudFoundryHealthEndpointWebExtension.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/servlet/CloudFoundryHealthEndpointWebExtension.java index c908742b6e8..961f7d4d5ee 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/servlet/CloudFoundryHealthEndpointWebExtension.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/servlet/CloudFoundryHealthEndpointWebExtension.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2017 the original author or authors. + * Copyright 2012-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,7 +16,7 @@ package org.springframework.boot.actuate.autoconfigure.cloudfoundry.servlet; -import org.springframework.boot.actuate.autoconfigure.cloudfoundry.CloudFoundryEndpointFilter; +import org.springframework.boot.actuate.autoconfigure.cloudfoundry.CloudFoundryEndpointWebExtension; import org.springframework.boot.actuate.endpoint.annotation.EndpointExtension; import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; import org.springframework.boot.actuate.endpoint.web.WebEndpointResponse; @@ -31,7 +31,7 @@ import org.springframework.boot.actuate.health.HealthEndpointWebExtension; * @author Madhura Bhave * @since 2.0.0 */ -@EndpointExtension(filter = CloudFoundryEndpointFilter.class, endpoint = HealthEndpoint.class) +@CloudFoundryEndpointWebExtension(endpoint = HealthEndpoint.class) public class CloudFoundryHealthEndpointWebExtension { private final HealthEndpointWebExtension delegate;