private Data dereference(XMLCryptoContext context) throws XMLSignatureException {
    Data data = null;

    // use user-specified URIDereferencer if specified; otherwise use deflt
    URIDereferencer deref = context.getURIDereferencer();
    if (deref == null) {
      deref = DOMURIDereferencer.INSTANCE;
    }
    try {
      data = deref.dereference(this, context);
      if (log.isLoggable(Level.FINE)) {
        log.log(Level.FINE, "URIDereferencer class name: " + deref.getClass().getName());
        log.log(Level.FINE, "Data class name: " + data.getClass().getName());
      }
    } catch (URIReferenceException ure) {
      throw new XMLSignatureException(ure);
    }

    return data;
  }