} catch (InstantiationException e) {
log.error(e, e);
diagnostic(SRWDiagnostic.GeneralSystemError,
e.getMessage(), response);
}
RecordsType records = new RecordsType();
records.setRecord(new RecordType[numRecs]);
int i;
MessageElement elems[];
Record rec;
RecordType rt;
String recStr = "";
StringOrXmlFragment frag;
/**
* One at a time, retrieve and display the requested documents.
*/
log.debug("trying to get "+numRecs+
" records starting with record "+startPoint+
" from a set of "+postingsCount+" records");
for (i=0; list!=null && i<numRecs && list.hasNext(); i++) {
rt = new RecordType();
rt.setRecordPacking(recordPacking);
frag = new StringOrXmlFragment();
elems = new MessageElement[1];
frag.set_any(elems);
try {
rec=list.nextRecord();
log.debug("rec="+rec);
recStr=transform(rec, schemaID).getRecord();
if (log.isDebugEnabled())
try {
log.debug("Transformed XML:\n" + Utilities.byteArrayToString(
recStr.getBytes("UTF8")));
} catch (UnsupportedEncodingException e) {} // can't happen
makeElem(recStr, rt, schemaID, schemaName, recordPacking, docb, elems);
if(rec.hasExtraRecordInfo())
setExtraRecordData(rt, rec.getExtraRecordInfo());
} catch (IOException e) {
log.error("error getting document "+(i+1)+", postings="+postingsCount);
log.error(e, e);
try {
makeElem(SRWDiagnostic.newSurrogateDiagnostic(
"info:srw/diagnostic/1/",
SRWDiagnostic.RecordTemporarilyUnavailable,
null), rt, null,
"info:srw/schema/1/diagnostics-v1.1",
recordPacking, docb, elems);
} catch (IOException e2) {
log.error(e, e);
break;
} catch (SAXException e2) {
log.error(e, e);
break;
}
} catch (NoSuchElementException e) {
log.error("error getting document "+(i+1)+", postings="+postingsCount);
log.error(e, e);
try {
makeElem(SRWDiagnostic.newSurrogateDiagnostic(
"info:srw/diagnostic/1/",
SRWDiagnostic.RecordTemporarilyUnavailable,
null), rt, null,
"info:srw/schema/1/diagnostics-v1.1",
recordPacking, docb, elems);
} catch (IOException e2) {
log.error(e, e);
break;
} catch (SAXException e2) {
log.error(e, e);
break;
}
} catch (SAXException e) {
try {
log.error(e, e);
makeElem(SRWDiagnostic.newSurrogateDiagnostic(
"info:srw/diagnostic/1/",
SRWDiagnostic.RecordTemporarilyUnavailable,
null), rt, null,
"info:srw/schema/1/diagnostics-v1.1",
recordPacking, docb, elems);
} catch (IOException e2) {
log.error(e, e);
break;
} catch (SAXException e2) {
log.error(e, e);
break;
}
log.error("error getting document "+(i+1)+", postings="+postingsCount);
log.error(e, e);
try {
log.error("Bad record:\n" + Utilities.byteArrayToString(
recStr.getBytes("UTF8")));
} catch (UnsupportedEncodingException e2) {} // can't happen
} catch (SRWDiagnostic e) {
try {
makeElem(SRWDiagnostic.newSurrogateDiagnostic(
"info:srw/diagnostic/1/", e.getCode(),
e.getAddInfo()), rt, null,
"info:srw/schema/1/diagnostics-v1.1",
recordPacking, docb, elems);
} catch (IOException e2) {
log.error(e, e);
break;
} catch (SAXException e2) {
log.error(e, e);
break;
}
log.error("error getting document "+(i+1)+", postings="+postingsCount);
log.error(e, e);
try {
log.error("Bad record:\n" + Utilities.byteArrayToString(
recStr.getBytes("UTF8")));
} catch (UnsupportedEncodingException e2) {} // can't happen
}
rt.setRecordData(frag);
rt.setRecordPosition(new PositiveInteger(Long.toString(startPoint+i)));
records.setRecord(i, rt);
}
response.setRecords(records);
if (startPoint+i<=postingsCount)
response.setNextRecordPosition(new PositiveInteger(Long.toString(startPoint+i)));
} // else if(numRecs>0)