[java-shib-metadata] branch main updated: JSPT-108 ServiceableComponent should implement AutoClose

Rod Widdowson rdw at steadingsoftware.com
Sat Jul 23 09:54:35 UTC 2022


This is an automated email from the git hooks/post-receive script.

rdw pushed a commit to branch main
in repository java-shib-metadata.

View the commit online:
http://git.shibboleth.net/view/?p=java-shib-metadata.git;a=commit;h=8527a98ebaa829c6d1753bc0b11733d8e5acaea2

The following commit(s) were added to refs/heads/main by this push:
     new 8527a98eb JSPT-108 ServiceableComponent should implement AutoClose
8527a98eb is described below

commit 8527a98ebaa829c6d1753bc0b11733d8e5acaea2
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Sat Jul 23 10:53:42 2022 +0100

    JSPT-108 ServiceableComponent should implement AutoClose
    
    https://shibboleth.atlassian.net/browse/JSPT-108
    
    Exploit the fact of being AutoClose
---
 .../impl/MetadataResolverServiceGaugeSet.java      | 14 +++------
 .../metadata/impl/ReloadableMetadataResolver.java  | 34 ++++------------------
 .../spring/metadata/EmptyChainService.java         |  6 +---
 .../spring/metadata/MetadataFailFastTest.java      | 23 ++++++++++-----
 4 files changed, 26 insertions(+), 51 deletions(-)

diff --git a/shib-metadata-impl/src/main/java/net/shibboleth/idp/saml/metadata/impl/MetadataResolverServiceGaugeSet.java b/shib-metadata-impl/src/main/java/net/shibboleth/idp/saml/metadata/impl/MetadataResolverServiceGaugeSet.java
index bc30469cf..e884b9682 100644
--- a/shib-metadata-impl/src/main/java/net/shibboleth/idp/saml/metadata/impl/MetadataResolverServiceGaugeSet.java
+++ b/shib-metadata-impl/src/main/java/net/shibboleth/idp/saml/metadata/impl/MetadataResolverServiceGaugeSet.java
@@ -201,9 +201,8 @@ public class MetadataResolverServiceGaugeSet extends ReloadableServiceGaugeSet<M
      */
     private <T> Map<String,T> valueGetter(final BiConsumer<Builder<String,T>, MetadataResolver> consume) {
         final Builder<String,T> mapBuilder = ImmutableMap.builder();
-        final ServiceableComponent<?> component = getService().getServiceableComponent();
-        if (component != null) {
-            try {
+        try (final ServiceableComponent<?> component = getService().getServiceableComponent()) {
+            if (component != null) {
                 // Check type - just in case
                 if (!(component.getComponent() instanceof MetadataResolver)) {
                     log.warn("{} : Injected Service was not for an Metadata Resolver : ({}) ",
@@ -214,8 +213,6 @@ public class MetadataResolverServiceGaugeSet extends ReloadableServiceGaugeSet<M
                         consume.accept(mapBuilder, resolver);
                     }
                 }
-            } finally {
-                component.unpinComponent();
             }
         }
         return mapBuilder.build();
@@ -227,17 +224,14 @@ public class MetadataResolverServiceGaugeSet extends ReloadableServiceGaugeSet<M
     protected void doInitialize() throws ComponentInitializationException {
         super.doInitialize();
 
-        final ServiceableComponent<?> component = getService().getServiceableComponent();
-        if (component != null) {
-            try {
+        try (final ServiceableComponent<?> component = getService().getServiceableComponent()) {
+            if (component != null) {
                 if (component.getComponent() instanceof MetadataResolver) {
                     return;
                 }
                 log.error("{} : Injected service was not for a MetadataResolver ({}) ",
                         getLogPrefix(), component.getClass());
                 throw new ComponentInitializationException("Injected service was not for a MetadataResolver");
-            } finally {
-                component.unpinComponent();
             }
         }
         log.debug("{} : Injected service has not initialized sucessfully yet. Skipping type test",
diff --git a/shib-metadata-impl/src/main/java/net/shibboleth/idp/saml/metadata/impl/ReloadableMetadataResolver.java b/shib-metadata-impl/src/main/java/net/shibboleth/idp/saml/metadata/impl/ReloadableMetadataResolver.java
index 979d94f8b..4e636c31a 100644
--- a/shib-metadata-impl/src/main/java/net/shibboleth/idp/saml/metadata/impl/ReloadableMetadataResolver.java
+++ b/shib-metadata-impl/src/main/java/net/shibboleth/idp/saml/metadata/impl/ReloadableMetadataResolver.java
@@ -62,9 +62,7 @@ public class ReloadableMetadataResolver extends AbstractIdentifiableInitializabl
     /** {@inheritDoc} */
     @Override @Nonnull public Iterable<EntityDescriptor> resolve(final CriteriaSet criteria) throws ResolverException {
         checkComponentActive();
-        ServiceableComponent<MetadataResolver> component = null;
-        try {
-            component = service.getServiceableComponent();
+        try (final ServiceableComponent<MetadataResolver> component = service.getServiceableComponent()) {
             if (null == component) {
                 log.error("RelyingPartyMetadataProvider '{}': Error accessing underlying metadata source: "
                         + "Invalid configuration.", getId());
@@ -74,19 +72,15 @@ public class ReloadableMetadataResolver extends AbstractIdentifiableInitializabl
             }
         } catch (final ResolverException e) {
             log.error("RelyingPartyMetadataProvider '{}': Error during resolution", getId(), e);
-        } finally {
-            if (null != component) {
-                component.unpinComponent();
-            }
         }
+
         return Collections.emptySet();
     }
 
     /** {@inheritDoc} */
     @Override @Nullable public EntityDescriptor resolveSingle(final CriteriaSet criteria) throws ResolverException {
-        checkComponentActive();        ServiceableComponent<MetadataResolver> component = null;
-        try {
-            component = service.getServiceableComponent();
+        checkComponentActive();
+        try (final ServiceableComponent<MetadataResolver> component = service.getServiceableComponent()) {
             if (null == component) {
                 log.error("RelyingPartyMetadataProvider '{}': Error accessing underlying metadata source: "
                         + "Invalid configuration.", getId());
@@ -96,10 +90,6 @@ public class ReloadableMetadataResolver extends AbstractIdentifiableInitializabl
             }
         } catch (final ResolverException e) {
             log.error("RelyingPartyResolver '{}': Error during resolution", getId(), e);
-        } finally {
-            if (null != component) {
-                component.unpinComponent();
-            }
         }
         return null;
     }
@@ -107,9 +97,7 @@ public class ReloadableMetadataResolver extends AbstractIdentifiableInitializabl
     /** {@inheritDoc} */
     @Override public boolean isRequireValidMetadata() {
         checkComponentActive();
-        ServiceableComponent<MetadataResolver> component = null;
-        try {
-            component = service.getServiceableComponent();
+        try (final ServiceableComponent<MetadataResolver> component = service.getServiceableComponent()) {
             if (null == component) {
                 log.error("RelyingPartyMetadataProvider '{}': Error accessing underlying metadata source: "
                         + "Invalid configuration.", getId());
@@ -117,10 +105,6 @@ public class ReloadableMetadataResolver extends AbstractIdentifiableInitializabl
                 final MetadataResolver resolver = component.getComponent();
                 return resolver.isRequireValidMetadata();
             }
-        } finally {
-            if (null != component) {
-                component.unpinComponent();
-            }
         }
         throw new IllegalAccessError("Could not find a valid MetadataResolver");
     }
@@ -133,9 +117,7 @@ public class ReloadableMetadataResolver extends AbstractIdentifiableInitializabl
     /** {@inheritDoc} */
     @Override public MetadataFilter getMetadataFilter() {
         checkComponentActive();
-        ServiceableComponent<MetadataResolver> component = null;
-        try {
-            component = service.getServiceableComponent();
+        try (final ServiceableComponent<MetadataResolver> component = service.getServiceableComponent()) {
             if (null == component) {
                 log.error("RelyingPartyMetadataProvider '{}': Error accessing underlying metadata source: "
                         + "Invalid configuration.", getId());
@@ -143,10 +125,6 @@ public class ReloadableMetadataResolver extends AbstractIdentifiableInitializabl
                 final MetadataResolver resolver = component.getComponent();
                 return resolver.getMetadataFilter();
             }
-        } finally {
-            if (null != component) {
-                component.unpinComponent();
-            }
         }
         throw new IllegalAccessError("Could not find a valid MetadataResolver");
     }
diff --git a/shib-metadata-spring/src/test/java/net/shibboleth/spring/metadata/EmptyChainService.java b/shib-metadata-spring/src/test/java/net/shibboleth/spring/metadata/EmptyChainService.java
index 92e1385b5..bbc173ff0 100644
--- a/shib-metadata-spring/src/test/java/net/shibboleth/spring/metadata/EmptyChainService.java
+++ b/shib-metadata-spring/src/test/java/net/shibboleth/spring/metadata/EmptyChainService.java
@@ -32,13 +32,9 @@ public class EmptyChainService extends AbstractMetadataParserTest {
 
     @Test public void setup() throws IOException {
         final ReloadableService<RefreshableMetadataResolver> service = getBean(ReloadableService.class, "empty-chain-svc.xml");
-        final ServiceableComponent<RefreshableMetadataResolver> comp = service.getServiceableComponent();
-        try {
+        try (final ServiceableComponent<RefreshableMetadataResolver> comp = service.getServiceableComponent()) {
             final ChainingMetadataResolver chain = (ChainingMetadataResolver) comp.getComponent();
             Assert.assertTrue(chain.getResolvers().isEmpty());
-            
-        } finally {
-            comp.unpinComponent();
         }
     }
 
diff --git a/shib-metadata-spring/src/test/java/net/shibboleth/spring/metadata/MetadataFailFastTest.java b/shib-metadata-spring/src/test/java/net/shibboleth/spring/metadata/MetadataFailFastTest.java
index d5b91fbc0..4d2a1b030 100644
--- a/shib-metadata-spring/src/test/java/net/shibboleth/spring/metadata/MetadataFailFastTest.java
+++ b/shib-metadata-spring/src/test/java/net/shibboleth/spring/metadata/MetadataFailFastTest.java
@@ -46,8 +46,10 @@ public class MetadataFailFastTest extends AbstractFailFastTest {
         final Object bean = getBean(propertySource("ServiceConfiguration", makePath("inLineMetadataGood.xml")), "metadataBeansDefaultFF.xml");
         final ReloadableService<MetadataResolver > service = (ReloadableService<MetadataResolver>) bean;
         assertNotNull(service);
-        final MetadataResolver resolver = service.getServiceableComponent().getComponent();
-        assertNotNull(resolver);
+        try (final ServiceableComponent<MetadataResolver> srv = service.getServiceableComponent()) {
+            final MetadataResolver resolver = srv.getComponent();
+            assertNotNull(resolver);
+        }
     }
 
     private void nonWorkingInline(final Boolean failFast) throws IOException {
@@ -70,8 +72,9 @@ public class MetadataFailFastTest extends AbstractFailFastTest {
             return;
         }
         assertNotNull(service);
-        final ServiceableComponent<MetadataResolver> component = service.getServiceableComponent();
-        assertNull(component);
+        try (final ServiceableComponent<MetadataResolver> component = service.getServiceableComponent()) {
+            assertNull(component);
+        }
     }
 
     @Test public void nonWorkingInlineFailFast() throws IOException {
@@ -93,8 +96,10 @@ public class MetadataFailFastTest extends AbstractFailFastTest {
         final Object bean = getBean(propertySource(prop), "metadataBeansDefaultFF.xml");
         final ReloadableService<MetadataResolver > service = (ReloadableService<MetadataResolver>) bean;
         assertNotNull(service);
-        final MetadataResolver resolver = service.getServiceableComponent().getComponent();
-        assertNotNull(resolver);
+        try (final ServiceableComponent<MetadataResolver> srv = service.getServiceableComponent()) {
+            final MetadataResolver resolver = srv.getComponent();
+            assertNotNull(resolver);
+        }
     }
 
     private void badFile(final Boolean failFast) throws IOException {
@@ -142,8 +147,10 @@ public class MetadataFailFastTest extends AbstractFailFastTest {
         final Object bean = getBean(propertySource(prop), "metadataBeansDefaultFF.xml");
         final ReloadableService<MetadataResolver > service = (ReloadableService<MetadataResolver>) bean;
         assertNotNull(service);
-        final MetadataResolver resolver = service.getServiceableComponent().getComponent();
-        assertNotNull(resolver);
+        try (final ServiceableComponent<MetadataResolver> srv = service.getServiceableComponent()) {
+            final MetadataResolver resolver = srv.getComponent();
+            assertNotNull(resolver);
+        }
     }
 
     private void badHttp(final Boolean failFast) throws IOException {

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the commits mailing list