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
readFrommethods 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;
}
}
thanks for letting me know, I have to say i was really surprised how hard it seems to be to get the namespace uri's in Java. I'll have a look ... maybe there should be an option on SbgnUtil that controls whether a conversion should be attempted or not, and only if perform the workaround. I'll think about it
added test code, and unified the way non-files are treated, i hope this resolves the issue.