Details
-
Improvement
-
Status: Resolved
-
Minor
-
Resolution: Won't Fix
-
3.5
-
None
-
None
Description
The FieldStreamDataSource currently throws a DataImportHandlerException if a field value is null.
IMHO this is not appropriate: It is legal for field values to be null (like no Blob exists in a particular row).
I suggest to return an empty InputStream rather than throwing a DataImportHandlerException.
public InputStream getData(String query) { Object o = wrapper.getVariableResolver().resolve(dataField); if (o == null) { //better: return new ByteArrayInputStream(new byte[0]); throw new DataImportHandlerException(SEVERE, "No field available for name : " + dataField); } if (o instanceof Blob) { Blob blob = (Blob) o; try { //Most of the JDBC drivers have getBinaryStream defined as public // so let us just check it Method m = blob.getClass().getDeclaredMethod("getBinaryStream"); if (Modifier.isPublic(m.getModifiers())) { return (InputStream) m.invoke(blob); } else { // force invoke m.setAccessible(true); return (InputStream) m.invoke(blob); } } catch (Exception e) { LOG.info("Unable to get data from BLOB"); return null; } } else if (o instanceof byte[]) { byte[] bytes = (byte[]) o; return new ByteArrayInputStream(bytes); } else { throw new RuntimeException("unsupported type : " + o.getClass()); } }
Maybe the best implementation would be to distinguish between a none-existing field and a null or empty field.
Attachments
Issue Links
- is superceded by
-
SOLR-14783 Remove DIH from 9.0
- Closed