import java.util.Map;
import org.apache.log4j.Logger;
+import org.opensaml.saml2.metadata.EntitiesDescriptor;
+import org.opensaml.saml2.metadata.EntityDescriptor;
+import org.opensaml.saml2.metadata.provider.MetadataProvider;
+import org.opensaml.saml2.metadata.provider.MetadataProviderException;
+import org.opensaml.xml.XMLObject;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import edu.internet2.middleware.shibboleth.idp.IdPConfig;
-import edu.internet2.middleware.shibboleth.metadata.EntitiesDescriptor;
-import edu.internet2.middleware.shibboleth.metadata.EntityDescriptor;
-import edu.internet2.middleware.shibboleth.metadata.Metadata;
/**
* Class for determining the effective relying party from the unique id of the service provider. Checks first for an
private static Logger log = Logger.getLogger(ServiceProviderMapper.class.getName());
protected Map relyingParties = new HashMap();
- private Metadata metaData;
+ private MetadataProvider metaData;
private IdPConfig configuration;
private Credentials credentials;
private NameMapper nameMapper;
}
- public void setMetadata(Metadata metadata) {
+ public void setMetadata(MetadataProvider metadata) {
this.metaData = metadata;
}
if (metaData == null) { return null; }
- EntityDescriptor provider = metaData.lookup(providerIdFromSP);
+ // Attempt to lookup the entity in the metdata
+ EntityDescriptor provider = null;
+ try {
+ provider = metaData.getEntityDescriptor(providerIdFromSP);
+ } catch (MetadataProviderException e) {
+ log.error("Problem encountered during metadata lookup of entity (" + providerIdFromSP + "): " + e);
+ }
+
+ // OK, if we found it travel recurse down the tree of parent entities
if (provider != null) {
- EntitiesDescriptor parent = provider.getEntitiesDescriptor();
+ EntitiesDescriptor parent = getParentEntitiesDescriptor(provider);
+
while (parent != null) {
if (parent.getName() != null) {
if (relyingParties.containsKey(parent.getName())) {
+ "), but no matching Relying Party was found.");
}
}
- parent = parent.getEntitiesDescriptor();
+ parent = getParentEntitiesDescriptor(parent);
}
}
return null;
}
+ private EntitiesDescriptor getParentEntitiesDescriptor(XMLObject entity) {
+
+ Object parent = entity.getParent();
+
+ if (parent instanceof EntitiesDescriptor) { return (EntitiesDescriptor) parent; }
+
+ return null;
+ }
+
/**
* Base relying party implementation.
*