diff --git a/src/main/java/org/springframework/hateoas/config/EnableHypermediaSupport.java b/src/main/java/org/springframework/hateoas/config/EnableHypermediaSupport.java index 28d8964b..46879555 100644 --- a/src/main/java/org/springframework/hateoas/config/EnableHypermediaSupport.java +++ b/src/main/java/org/springframework/hateoas/config/EnableHypermediaSupport.java @@ -17,7 +17,6 @@ package org.springframework.hateoas.config; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; -import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @@ -44,7 +43,6 @@ import org.springframework.hateoas.LinkDiscoverer; */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) -@Inherited @Documented @Import(HypermediaSupportBeanDefinitionRegistrar.class) public @interface EnableHypermediaSupport { diff --git a/src/test/java/org/springframework/hateoas/config/EnableHypermediaSupportIntegrationTest.java b/src/test/java/org/springframework/hateoas/config/EnableHypermediaSupportIntegrationTest.java index bc39e8c3..34090eca 100644 --- a/src/test/java/org/springframework/hateoas/config/EnableHypermediaSupportIntegrationTest.java +++ b/src/test/java/org/springframework/hateoas/config/EnableHypermediaSupportIntegrationTest.java @@ -29,6 +29,7 @@ import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; import org.springframework.hateoas.EntityLinks; import org.springframework.hateoas.LinkDiscoverer; import org.springframework.hateoas.LinkDiscoverers; @@ -56,21 +57,8 @@ import com.fasterxml.jackson.databind.ObjectMapper; public class EnableHypermediaSupportIntegrationTest { @Test - @SuppressWarnings({ "unchecked" }) public void bootstrapHalConfiguration() { - - ApplicationContext context = new AnnotationConfigApplicationContext(HalConfig.class); - assertEntityLinksSetUp(context); - assertThat(context.getBean(LinkDiscoverer.class), is(instanceOf(HalLinkDiscoverer.class))); - assertThat(context.getBean(ObjectMapper.class), is(notNullValue())); - - RequestMappingHandlerAdapter rmha = context.getBean(RequestMappingHandlerAdapter.class); - assertThat(rmha.getMessageConverters(), Matchers.> hasItems( - instanceOf(MappingJackson2HttpMessageConverter.class), instanceOf(MappingJacksonHttpMessageConverter.class))); - - AnnotationMethodHandlerAdapter amha = context.getBean(AnnotationMethodHandlerAdapter.class); - assertThat(Arrays.asList(amha.getMessageConverters()), Matchers.> hasItems( - instanceOf(MappingJackson2HttpMessageConverter.class), instanceOf(MappingJacksonHttpMessageConverter.class))); + assertHalSetupForConfigClass(HalConfig.class); } @Test @@ -84,6 +72,11 @@ public class EnableHypermediaSupportIntegrationTest { assertRelProvidersSetUp(context); } + @Test + public void foo() { + assertHalSetupForConfigClass(ExtendedHalConfig.class); + } + private static void assertEntityLinksSetUp(ApplicationContext context) { Map discoverers = context.getBeansOfType(EntityLinks.class); @@ -96,8 +89,25 @@ public class EnableHypermediaSupportIntegrationTest { assertThat(discoverers.values(), Matchers. hasItem(instanceOf(DelegatingRelProvider.class))); } + @SuppressWarnings({ "unchecked" }) + private static void assertHalSetupForConfigClass(Class configClass) { + + ApplicationContext context = new AnnotationConfigApplicationContext(configClass); + assertEntityLinksSetUp(context); + assertThat(context.getBean(LinkDiscoverer.class), is(instanceOf(HalLinkDiscoverer.class))); + assertThat(context.getBean(ObjectMapper.class), is(notNullValue())); + + RequestMappingHandlerAdapter rmha = context.getBean(RequestMappingHandlerAdapter.class); + assertThat(rmha.getMessageConverters(), Matchers.> hasItems( + instanceOf(MappingJackson2HttpMessageConverter.class), instanceOf(MappingJacksonHttpMessageConverter.class))); + + AnnotationMethodHandlerAdapter amha = context.getBean(AnnotationMethodHandlerAdapter.class); + assertThat(Arrays.asList(amha.getMessageConverters()), Matchers.> hasItems( + instanceOf(MappingJackson2HttpMessageConverter.class), instanceOf(MappingJacksonHttpMessageConverter.class))); + } + @Configuration - @EnableHypermediaSupport(type = HypermediaType.HAL) + @Import(DelegateConfig.class) static class HalConfig { static int numberOfMessageConverters = 0; @@ -117,4 +127,15 @@ public class EnableHypermediaSupportIntegrationTest { return adapter; } } + + @Configuration + static class ExtendedHalConfig extends HalConfig { + + } + + @Configuration + @EnableHypermediaSupport(type = HypermediaType.HAL) + static class DelegateConfig { + + } }