[spring-extensions] branch maint-5 updated: JSE-24 - Conditional resource type

Scott Cantor cantor.2 at osu.edu
Tue Dec 19 13:37:51 EST 2017


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

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

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

The following commit(s) were added to refs/heads/maint-5 by this push:
       new  27eccd0   JSE-24 - Conditional resource type
27eccd0 is described below

commit 27eccd03491a7a7c044e8ffb255bd33b316f32c5
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Tue Dec 19 13:37:49 2017 -0500

    JSE-24 - Conditional resource type
    
    https://issues.shibboleth.net/jira/browse/JSE-24
    
    Add conditional resource import capability.
---
 .../resource/ConditionalResourceResolver.java      | 67 ++++++++++++++++++++++
 .../ext/spring/util/ApplicationContextBuilder.java |  2 +
 .../spring/resource/ConditionalResourceTest.java   | 18 ++++++
 .../ext/spring/resource/conditional-import.xml     | 14 +++++
 4 files changed, 101 insertions(+)

diff --git a/src/main/java/net/shibboleth/ext/spring/resource/ConditionalResourceResolver.java b/src/main/java/net/shibboleth/ext/spring/resource/ConditionalResourceResolver.java
new file mode 100644
index 0000000..a31059d
--- /dev/null
+++ b/src/main/java/net/shibboleth/ext/spring/resource/ConditionalResourceResolver.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements.  See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You 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 net.shibboleth.ext.spring.resource;
+
+import javax.annotation.Nonnull;
+
+import org.springframework.core.io.ProtocolResolver;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.ResourceLoader;
+
+import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
+import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+
+/**
+ * Supports a "conditional:resourcepath" URL syntax for wrapping a Spring resource with a
+ * {@link ConditionalResource}.
+ */
+public class ConditionalResourceResolver implements ProtocolResolver {
+
+    /** URL scheme. */
+    @Nonnull @NotEmpty static final String CONDITIONAL_RESOURCE_PREFIX = "conditional:";
+    
+    /**
+     * Constructor.
+     */
+    public ConditionalResourceResolver() {
+        
+    }
+
+    /** {@inheritDoc} */
+    public Resource resolve(final String location, final ResourceLoader resourceLoader) {
+        
+        if (location.startsWith(CONDITIONAL_RESOURCE_PREFIX)) {
+            final Resource wrapped = resourceLoader.getResource(
+                    location.substring(CONDITIONAL_RESOURCE_PREFIX.length()));
+            if (wrapped != null) {
+                final ConditionalResource r = new ConditionalResource(wrapped);
+                r.setId(location);
+                try {
+                    r.initialize();
+                } catch (final ComponentInitializationException e) {
+                    // This doesn't happen.
+                }
+                
+                return r;
+            }
+        }
+        
+        return null;
+    }
+
+}
\ No newline at end of file
diff --git a/src/main/java/net/shibboleth/ext/spring/util/ApplicationContextBuilder.java b/src/main/java/net/shibboleth/ext/spring/util/ApplicationContextBuilder.java
index 3df801e..825f1e2 100644
--- a/src/main/java/net/shibboleth/ext/spring/util/ApplicationContextBuilder.java
+++ b/src/main/java/net/shibboleth/ext/spring/util/ApplicationContextBuilder.java
@@ -33,6 +33,7 @@ import net.shibboleth.ext.spring.config.StringBooleanToPredicateConverter;
 import net.shibboleth.ext.spring.config.StringToIPRangeConverter;
 import net.shibboleth.ext.spring.config.StringToResourceConverter;
 import net.shibboleth.ext.spring.context.FilesystemGenericApplicationContext;
+import net.shibboleth.ext.spring.resource.ConditionalResourceResolver;
 import net.shibboleth.ext.spring.resource.PreferFileSystemResourceLoader;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
@@ -274,6 +275,7 @@ public class ApplicationContextBuilder {
         context.setDisplayName("ApplicationContext:" + contextName != null ? contextName : "anonymous");
         
         context.setResourceLoader(new PreferFileSystemResourceLoader());
+        context.addProtocolResolver(new ConditionalResourceResolver());
         
         if (conversionService != null) {
             context.getBeanFactory().setConversionService(conversionService);
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 ddc2a2b..4fa9ce1 100644
--- a/src/test/java/net/shibboleth/ext/spring/resource/ConditionalResourceTest.java
+++ b/src/test/java/net/shibboleth/ext/spring/resource/ConditionalResourceTest.java
@@ -151,4 +151,22 @@ public class ConditionalResourceTest {
         Assert.assertFalse(context.containsBean("testBean"));
     }
     
+    @Test public void testImport() {
+        final ClassPathResource resource =
+                new ClassPathResource("net/shibboleth/ext/spring/resource/conditional-import.xml");
+        
+        final GenericApplicationContext parentContext = new GenericApplicationContext();
+        parentContext.refresh(); // THIS IS REQUIRED
+
+        final GenericApplicationContext context = new GenericApplicationContext(parentContext);
+        final XmlBeanDefinitionReader beanDefinitionReader = new SchemaTypeAwareXMLBeanDefinitionReader(context);
+        context.addProtocolResolver(new ConditionalResourceResolver());
+
+        beanDefinitionReader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_XSD);
+        beanDefinitionReader.loadBeanDefinitions(resource);
+        context.refresh();
+        
+        Assert.assertEquals(context.getBean("testBean"), "foo");
+    }
+    
 }
\ No newline at end of file
diff --git a/src/test/resources/net/shibboleth/ext/spring/resource/conditional-import.xml b/src/test/resources/net/shibboleth/ext/spring/resource/conditional-import.xml
new file mode 100644
index 0000000..475e4fb
--- /dev/null
+++ b/src/test/resources/net/shibboleth/ext/spring/resource/conditional-import.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:p="http://www.springframework.org/schema/p"
+    xmlns:c="http://www.springframework.org/schema/c"
+	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"
+    default-init-method="initialize"
+    default-destroy-method="destroy">
+
+    <import resource="conditional:net/shibboleth/ext/spring/resource/conditional.xml" />
+    
+    <import resource="conditional:missing.xml" />
+        
+</beans>
\ No newline at end of file

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


More information about the commits mailing list