[spring-extensions] branch master updated: ConditionalResource cleanup

Scott Cantor cantor.2 at osu.edu
Wed Jun 17 17:55:31 UTC 2020


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

scantor pushed a commit to branch master
in repository spring-extensions.

View the commit online:
http://git.shibboleth.net/view/?p=spring-extensions.git;a=commit;h=987686d9f4fac6dfe385c8dc7a7da418cde13ddf

The following commit(s) were added to refs/heads/master by this push:
       new  987686d   ConditionalResource cleanup
987686d is described below

commit 987686d9f4fac6dfe385c8dc7a7da418cde13ddf
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Wed Jun 17 13:55:24 2020 -0400

    ConditionalResource cleanup
    
    - Fix some initialization guards and tests.
    - Add option for configurable "empty" resource content.
---
 .../ext/spring/resource/ConditionalResource.java   | 53 ++++++++++++++++++++--
 .../spring/resource/ConditionalResourceTest.java   |  9 ++--
 .../ext/spring/resource/HTTPResourceTest.java      |  1 -
 3 files changed, 55 insertions(+), 8 deletions(-)

diff --git a/src/main/java/net/shibboleth/ext/spring/resource/ConditionalResource.java b/src/main/java/net/shibboleth/ext/spring/resource/ConditionalResource.java
index 9a4b7e6..5f72a1d 100644
--- a/src/main/java/net/shibboleth/ext/spring/resource/ConditionalResource.java
+++ b/src/main/java/net/shibboleth/ext/spring/resource/ConditionalResource.java
@@ -33,10 +33,13 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.BeanNameAware;
 import org.springframework.core.io.Resource;
 
+import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 import net.shibboleth.utilities.java.support.component.AbstractIdentifiedInitializableComponent;
+import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 
+
 /**
  * A wrapper that guards a {@link Resource} that may be absent by returning an empty bean file instead.
  * 
@@ -46,7 +49,7 @@ public class ConditionalResource extends AbstractIdentifiedInitializableComponen
         implements Resource, BeanNameAware, net.shibboleth.utilities.java.support.resource.Resource {
 
     /** Dummy content. */
-    @Nonnull @NotEmpty private static final String EMPTY_RESOURCE =
+    @Nonnull @NotEmpty private static final String DEFAULT_EMPTY_RESOURCE =
             "<beans xmlns=\"http://www.springframework.org/schema/beans\""
                     + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""
                     + " xsi:schemaLocation=\"http://www.springframework.org/schema/beans"
@@ -62,6 +65,9 @@ public class ConditionalResource extends AbstractIdentifiedInitializableComponen
     /** Resource to wrap. */
     @Nonnull private final Resource wrappedResource;
     
+    /** Content to return if the resource is missing. */
+    @NonnullAfterInit private String emptyResource; 
+    
     /**
      * Constructor.
      *
@@ -69,15 +75,31 @@ public class ConditionalResource extends AbstractIdentifiedInitializableComponen
      */
     public ConditionalResource(@Nonnull final Resource wrapped) {
         wrappedResource = Constraint.isNotNull(wrapped, "Wrapped resource cannot be null");
+        emptyResource = DEFAULT_EMPTY_RESOURCE;
     }
     
     /** {@inheritDoc} */
-    @Override public void setId(@Nonnull @NotEmpty final String id) {
+    @Override public synchronized void setId(@Nonnull @NotEmpty final String id) {
         super.setId(id);
     }
+    
+    /**
+     * Set the default content to return if the underlying resource is absent.
+     * 
+     * @param content default "empty" content
+     * 
+     * @since 6.1.0
+     */
+    public void setEmptyResource(@Nonnull final String content) {
+        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        
+        emptyResource = Constraint.isNotEmpty(content, "Empty content cannot be null");
+    }
 
     /** {@inheritDoc} */
     @Nonnull public InputStream getInputStream() throws IOException {
+        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+        
         try {
             return wrappedResource.getInputStream();
         } catch (final IOException e) {
@@ -86,7 +108,7 @@ public class ConditionalResource extends AbstractIdentifiedInitializableComponen
             } else {
                 log.debug("{} getInputStream failed on wrapped resource", getLogPrefix());
             }
-            return new ByteArrayInputStream(EMPTY_RESOURCE.getBytes(StandardCharsets.UTF_8));
+            return new ByteArrayInputStream(emptyResource.getBytes(StandardCharsets.UTF_8));
         }
     }
 
@@ -94,6 +116,7 @@ public class ConditionalResource extends AbstractIdentifiedInitializableComponen
     public net.shibboleth.utilities.java.support.resource.Resource createRelativeResource(final String relativePath)
             throws IOException {
         
+        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
         final Resource relative = wrappedResource.createRelative(relativePath);
         if (relative instanceof net.shibboleth.utilities.java.support.resource.Resource) {
             return (net.shibboleth.utilities.java.support.resource.Resource) relative;
@@ -109,6 +132,8 @@ public class ConditionalResource extends AbstractIdentifiedInitializableComponen
 
     /** {@inheritDoc} */
     public boolean exists() {
+        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+        
         if (!wrappedResource.exists()) {
             log.debug("{} Wrapped resource does not exist", getLogPrefix());
         }
@@ -117,16 +142,22 @@ public class ConditionalResource extends AbstractIdentifiedInitializableComponen
 
     /** {@inheritDoc} */
     public boolean isReadable() {
+        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+        
         return true;
     }
 
     /** {@inheritDoc} */
     public boolean isOpen() {
+        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+        
         return wrappedResource.isOpen();
     }
 
     /** {@inheritDoc} */
     public URL getURL() throws IOException {
+        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+        
         try {
             return wrappedResource.getURL();
         } catch (final IOException e) {
@@ -139,6 +170,8 @@ public class ConditionalResource extends AbstractIdentifiedInitializableComponen
 
     /** {@inheritDoc} */
     public URI getURI() throws IOException {
+        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+        
         try {
             return wrappedResource.getURI();
         } catch (final IOException e) {
@@ -151,6 +184,8 @@ public class ConditionalResource extends AbstractIdentifiedInitializableComponen
 
     /** {@inheritDoc} */
     public File getFile() throws IOException {
+        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+        
         try {
             return wrappedResource.getFile();
         } catch (final IOException e) {
@@ -163,18 +198,22 @@ public class ConditionalResource extends AbstractIdentifiedInitializableComponen
 
     /** {@inheritDoc} */
     public long contentLength() throws IOException {
+        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+        
         try {
             return wrappedResource.contentLength();
         } catch (final IOException e) {
             if (log.isDebugEnabled()) {
                 log.debug("{} contentLength failed on wrapped resource", getLogPrefix(), e);
             }
-            return EMPTY_RESOURCE.length();
+            return emptyResource.length();
         }
     }
 
     /** {@inheritDoc} */
     public long lastModified() throws IOException {
+        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+        
         try {
             return wrappedResource.lastModified();
         } catch (final IOException e) {
@@ -187,16 +226,22 @@ public class ConditionalResource extends AbstractIdentifiedInitializableComponen
 
     /** {@inheritDoc} */
     public Resource createRelative(final String relativePath) throws IOException {
+        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+        
         return wrappedResource.createRelative(relativePath);
     }
 
     /** {@inheritDoc} */
     public String getFilename() {
+        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+        
         return wrappedResource.getFilename();
     }
 
     /** {@inheritDoc} */
     public String getDescription() {
+        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+        
         return wrappedResource.getDescription();
     }
 
diff --git a/src/test/java/net/shibboleth/ext/spring/resource/ConditionalResourceTest.java b/src/test/java/net/shibboleth/ext/spring/resource/ConditionalResourceTest.java
index 8769d5e..897bd93 100644
--- a/src/test/java/net/shibboleth/ext/spring/resource/ConditionalResourceTest.java
+++ b/src/test/java/net/shibboleth/ext/spring/resource/ConditionalResourceTest.java
@@ -38,7 +38,6 @@ import org.testng.annotations.Test;
 /**
  * Test for {@link ConditionalResource}.
  */
- at SuppressWarnings("javadoc")
 public class ConditionalResourceTest {
 
     private final String existsURL = RepositorySupport.buildHTTPResourceURL("spring-extensions", "src/test/resources/net/shibboleth/ext/spring/resource/document.xml",false);
@@ -118,10 +117,12 @@ public class ConditionalResourceTest {
                 "net/shibboleth/ext/spring/resource/document.xml")));
     }
     
-    @Test public void testBeanExists() {
+    @Test public void testBeanExists() throws ComponentInitializationException {
         final ClassPathResource existsCPResource =
                 new ClassPathResource("net/shibboleth/ext/spring/resource/conditional.xml");
         final ConditionalResource existsResource = new ConditionalResource(existsCPResource);
+        existsResource.setId("test");
+        existsResource.initialize();
         
         final GenericApplicationContext parentContext = new GenericApplicationContext();
         parentContext.refresh(); // THIS IS REQUIRED
@@ -136,10 +137,12 @@ public class ConditionalResourceTest {
         Assert.assertEquals(context.getBean("testBean"), "foo");
     }
     
-    @Test public void testBeanMissing() {
+    @Test public void testBeanMissing() throws ComponentInitializationException {
         final ClassPathResource missingCPResource =
                 new ClassPathResource("net/shibboleth/ext/spring/resource/missing.xml");
         final ConditionalResource missingResource = new ConditionalResource(missingCPResource);
+        missingResource.setId("test");
+        missingResource.initialize();
         
         final GenericApplicationContext parentContext = new GenericApplicationContext();
         parentContext.refresh(); // THIS IS REQUIRED
diff --git a/src/test/java/net/shibboleth/ext/spring/resource/HTTPResourceTest.java b/src/test/java/net/shibboleth/ext/spring/resource/HTTPResourceTest.java
index 26c3992..7f629f3 100644
--- a/src/test/java/net/shibboleth/ext/spring/resource/HTTPResourceTest.java
+++ b/src/test/java/net/shibboleth/ext/spring/resource/HTTPResourceTest.java
@@ -44,7 +44,6 @@ import net.shibboleth.utilities.java.support.httpclient.InMemoryCachingHttpClien
 /**
  * Test for HTTPResource.
  */
- at SuppressWarnings("javadoc")
 public class HTTPResourceTest {
 
     private final String existsURL =

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


More information about the commits mailing list