/**
   * Populates additional information about the peer based on the previously loaded peerEntityId.
   *
   * @param samlContext to populate
   * @throws MetadataProviderException in case metadata problem is encountered
   */
  private void populatePeerContext(SAMLMessageContext samlContext)
      throws MetadataProviderException {

    String peerEntityId = samlContext.getPeerEntityId();
    QName peerEntityRole = samlContext.getPeerEntityRole();

    if (peerEntityId == null) {
      throw new MetadataProviderException("Peer entity ID wasn't specified, but is requested");
    }

    EntityDescriptor entityDescriptor = metadata.getEntityDescriptor(peerEntityId);
    RoleDescriptor roleDescriptor =
        metadata.getRole(peerEntityId, peerEntityRole, SAMLConstants.SAML20P_NS);
    ExtendedMetadata extendedMetadata = metadata.getExtendedMetadata(peerEntityId);

    if (entityDescriptor == null || roleDescriptor == null) {
      throw new MetadataProviderException(
          "Metadata for entity " + peerEntityId + " and role " + peerEntityRole + " wasn't found");
    }

    samlContext.setPeerEntityMetadata(entityDescriptor);
    samlContext.setPeerEntityRoleMetadata(roleDescriptor);
    samlContext.setPeerExtendedMetadata(extendedMetadata);
  }