[java-opensaml COMMIT] /trunk/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractDynam...

noreply at shibboleth.net noreply at shibboleth.net
Fri Oct 4 20:42:31 EDT 2013


Author: putmanb
Date: Fri Oct  4 20:42:31 2013
New Revision: 3461

URL: http://svn.shibboleth.net/view/java-opensaml?rev=3461&view=rev
Log:
More work on abstract base class for dynamic metadata resolvers.

Modified:
    trunk/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractDynamicMetadataResolver.java

Modified: trunk/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractDynamicMetadataResolver.java
URL: http://svn.shibboleth.net/view/java-opensaml/trunk/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractDynamicMetadataResolver.java?rev=3461&r1=3460&r2=3461&view=diff
==============================================================================
--- trunk/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractDynamicMetadataResolver.java (original)
+++ trunk/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractDynamicMetadataResolver.java Fri Oct  4 20:42:31 2013
@@ -17,22 +17,36 @@
 
 package org.opensaml.saml.metadata.resolver.impl;
 
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 import java.util.Timer;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReadWriteLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
 
 import javax.annotation.Nonnull;
 
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.primitive.StringSupport;
 import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
 import net.shibboleth.utilities.java.support.resolver.ResolverException;
 
+import org.apache.http.Header;
+import org.apache.http.HttpResponse;
+import org.apache.http.HttpStatus;
 import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpUriRequest;
 import org.opensaml.core.criterion.EntityIdCriterion;
 import org.opensaml.core.xml.XMLObject;
+import org.opensaml.core.xml.io.UnmarshallingException;
 import org.opensaml.saml.metadata.resolver.filter.FilterException;
 import org.opensaml.saml.saml2.metadata.EntitiesDescriptor;
 import org.opensaml.saml.saml2.metadata.EntityDescriptor;
@@ -44,7 +58,11 @@
 /**
  * Abstract subclass for metadata resolvers that resolve metadata dynamically, as needed and on demand.
  */
-public class AbstractDynamicMetadataResolver extends AbstractMetadataResolver {
+public abstract class AbstractDynamicMetadataResolver extends AbstractMetadataResolver {
+    
+    /** Default list of supported content MIME types. */
+    public static final String[] DEFAULT_CONTENT_TYPES = 
+            new String[] {"application/samlmetadata+xml", "application/xml", "text/xml"};
     
     /** Class logger. */
     private final Logger log = LoggerFactory.getLogger(AbstractDynamicMetadataResolver.class);
@@ -57,6 +75,13 @@
     
     /** Whether we created our own task timer during object construction. */
     private boolean createdOwnTaskTimer;
+    
+    /** List of supported MIME types for use in Accept request header and validation of 
+     * response Content-Type header.*/
+    private List<String> supportedContentTypes;
+    
+    /** Generated Accept request header value. */
+    private String supportedContentTypesValue;
     
     /**
      * Constructor.
@@ -86,6 +111,27 @@
         }
     }
     
+    /**
+     * Get the list of supported MIME types for use in Accept request header and validation of 
+     * response Content-Type header
+     * 
+     * @return the supported content types
+     */
+    public List<String> getSupportedContentTypes() {
+        return supportedContentTypes;
+    }
+
+    /**
+     * Set the list of supported MIME types for use in Accept request header and validation of 
+     * response Content-Type header
+     * 
+     * @param types the new supported content types to set
+     */
+    public void setSupportedContentTypes(List<String> types) {
+        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        supportedContentTypes = types;
+    }
+
     /** {@inheritDoc} */
     @Nonnull public Iterable<EntityDescriptor> resolve(CriteriaSet criteria) throws ResolverException {
         ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
@@ -96,56 +142,151 @@
             throw new ResolverException("Entity Id was not supplied in criteria set");
         }
         
-        // TODO lock for reading, or otherwise deal with concurrency
-        List<EntityDescriptor> descriptors = lookupEntityID(entityIdCriterion.getEntityId());
-        
-        if (!descriptors.isEmpty()) {
-            return descriptors;
-        } else {
-            return fetchByCriteria(criteria);
-        }

[... 327 lines stripped ...]


More information about the commits mailing list