/** * Parses the provider and returns set of entityIDs contained inside the provider. * * @param provider provider to parse * @return set of entityIDs available in the provider * @throws MetadataProviderException error */ protected List<String> parseProvider(MetadataProvider provider) throws MetadataProviderException { List<String> result = new LinkedList<String>(); XMLObject object = provider.getMetadata(); if (object instanceof EntityDescriptor) { addDescriptor(result, (EntityDescriptor) object); } else if (object instanceof EntitiesDescriptor) { addDescriptors(result, (EntitiesDescriptor) object); } return result; }
/** * Recursively parses descriptors object. Supports both nested entitiesDescriptor * elements and leaf entityDescriptors. EntityID of all found descriptors are added * to the result set. Signatures on all found entities are verified using the given policy * and trust engine. * * @param result result set of parsed entity IDs * @param descriptors descriptors to parse * @throws MetadataProviderException in case signature validation fails */ private void addDescriptors(List<String> result, EntitiesDescriptor descriptors) throws MetadataProviderException { log.debug("Found metadata EntitiesDescriptor with ID", descriptors.getID()); if (descriptors.getEntitiesDescriptors() != null) { for (EntitiesDescriptor descriptor : descriptors.getEntitiesDescriptors()) { addDescriptors(result, descriptor); } } if (descriptors.getEntityDescriptors() != null) { for (EntityDescriptor descriptor : descriptors.getEntityDescriptors()) { addDescriptor(result, descriptor); } } }