identifier.substring(oaiIDPrefix.length()),
identifier.substring(OAI_ID_PREFIX.length()),
    public String getRecord(String identifier, String metadataPrefix)        throws OAIInternalServerError, CannotDisseminateFormatException,               IdDoesNotExistException    {        log.info(LogManager.getHeader(null,            "oai_request",            "verb=getRecord,identifier=" + (identifier == null ? "null" : identifier) +            ",metadataPrefix=" + (metadataPrefix == null ? "null" : metadataPrefix)));        Context context = null;        HarvestedItemInfo itemInfo = null;        // First get the item from the DB        try        {            // Valid IDs start with oai:hostname:            if (identifier.startsWith(oaiIDPrefix))            {                context = new Context();                itemInfo = Harvest.getSingle(context,                    identifier.substring(oaiIDPrefix.length()), // Strip prefix to get raw handle                    true);            }        }        catch (SQLException se)        {            // Log the error            log.warn(LogManager.getHeader(context,                "database_error",                ""), se);            throw new OAIInternalServerError(se.toString());        }        finally        {            if (context != null)            {                context.abort();            }        }        String schemaURL = null;        if (itemInfo == null)        {            log.info(LogManager.getHeader(null,                "oai_error",                "id_does_not_exist"));            throw new IdDoesNotExistException(identifier);        }        else if ((schemaURL = getCrosswalks().getSchemaURL(metadataPrefix)) == null)        {            log.info(LogManager.getHeader(null,                "oai_error",                "cannot_disseminate_format"));            throw new CannotDisseminateFormatException(metadataPrefix);        }        return getRecordFactory().create(itemInfo, schemaURL, metadataPrefix);    }