@RequestMapping( value = "", method = {RequestMethod.GET, RequestMethod.POST}) public void handleOAI( @RequestParam(value = VERB, defaultValue = EMPTY_STRING) String verbName, @RequestParam(value = IDENTIFIER, required = false) String identifier, @RequestParam(value = METADATA_PREFIX, defaultValue = EMPTY_STRING) String metadataPrefix, @RequestParam(value = FROM, required = false) String from, @RequestParam(value = UNTIL, required = false) String until, @RequestParam(value = SET, required = false) String set, @RequestParam(value = RESUMPTION_TOKEN, required = false) String resumptionToken, HttpServletRequest request, HttpServletResponse response) throws IOException, ConnectException, SolrServerException, TransformerConfigurationException { Verb theVerb; try { theVerb = Verb.valueOf(verbName); } catch (NullPointerException e) { theVerb = Verb.Identify; } catch (IllegalArgumentException e) { theVerb = Verb.Identify; } SolrQuery query = new SolrQuery(); query.set("echoParams", "all"); if (clientXsltHandler == null) { query.set("tr", String.format(xsltPath, verbName)); } query.set(VERB, verbName); query.set("requestStr", request.getRequestURL().toString()); query.setQuery("*:*"); Locale locale = Locale.getDefault(); for (String errorType : errorTypes) { addErrorQuery(errorType, query, locale); } switch (theVerb) { case ListIdentifiers: query.setFields(collectionIdField, datestampField, setIdField); // No Break, extra constraint adding to below query constraints case ListRecords: case GetRecord: query.set("collectionIdField", collectionIdField); query.set("datestampField", datestampField); for (String filter : filterQueries) { query.addFilterQuery(filter); } if (metadataPrefix != null) { query.set(METADATA_PREFIX, metadataPrefix); } break; } switch (theVerb) { case Identify: case ListMetadataFormats: query.setRows(0); break; case GetRecord: query.setRows(0); if (identifier != null) { query.set(IDENTIFIER, identifier); if (identifier.startsWith(identifierPrefix)) { String collStr = identifier.substring(identifierPrefix.length()); try { // This is to ensure that collId is a valid number query.setQuery(collectionIdField + ":" + Integer.parseInt(collStr)); query.setRows(1); } catch (NumberFormatException n) { // just skip setting query, solr will detect missing collection since there // are 0 rows } } } break; case ListIdentifiers: case ListRecords: query.set(IDENTIFIER, identifierPrefix); if (resumptionToken != null) { processResumptionToken(query, resumptionToken); from = query.get(FROM, null); until = query.get(UNTIL, null); } else { query.setRows(numResultsToDisplay); if (from != null) { query.set(FROM, from); } if (until != null) { query.set(UNTIL, until); } } if (datestampField != null) { processDateRange(query, from, until); } if (setIdField != null) { query.set("setIdField", setIdField); if (set != null) { if (setPrefix != null) { if (set.startsWith(setPrefix + ":")) { set = set.substring(setPrefix.length() + 1); } else { query.setRows(0); } } query.set(SET, set); try { // This is to ensure that set is a number query.addFilterQuery(setIdField + ":" + Integer.parseInt(set)); } catch (NumberFormatException n) { query.setRows(0); } } } if (setPrefix != null) { query.set("setPrefix", setPrefix); } break; case ListSets: query.set("setIdField", setIdField); query.set("setNameField", setNameField); query.set("setDescField", setDescField); query.set("setPrefix", setPrefix); query.set(RESUMPTION_TOKEN, resumptionToken); query.setFields(setIdField, setNameField, setDescField); query.setRows(numResultsToDisplay); for (String setQuery : setQueries) { query.addFilterQuery(setQuery); } if (resumptionToken != null) { processResumptionToken(query, resumptionToken); } break; } response.setContentType("text/xml"); ResponseParser parser = null; if (clientXsltHandler != null) { parser = clientXsltHandler.newParserInstance(response); } else { parser = new PassThroughSolrResponseParser(response); } System.out.println("Solr Query: " + query.toString()); CustomSolrQueryRequest req = new CustomSolrQueryRequest(query, parser); if (solrServer == null) { solrServer = new CommonsHttpSolrServer(solrServerUrl); } req.process(solrServer); }