libsbgn
libsbgn copied to clipboard
SbgnUtil.readFrom(InputStream is) fails when conversion from Milestone 1 or 2 necessary
SbgnUtil.readFrom(InputStream is)
fails when a conversion is necessary (from Milestone 1 or 2).
The problem is that the input stream can only be used once.
This happens here
Sbgn result = (Sbgn) unmarshaller.unmarshal(is);
Afterwards the input stream is closed and a conversion is not possible.
This will always fail
String docUri = XmlUtil.getDocumentUri(is);
Possible fixes
- Don't provide conversion when an input stream is used. There is other
readFrom
methods which don't provide a conversion. - Save the input stream to a file and use
readFromFile
public static Sbgn readFrom(InputStream is) throws IOException, JAXBException {
try {
File tmp = File.createTempFile("sbgn-", ".sbgn");
tmp.deleteOnExit();
Files.copy(is, tmp.toPath(), StandardCopyOption.REPLACE_EXISTING);
return readFromFile(tmp);
} catch (IOException ex) {
throw ex;
}
}