diff --git a/image_readers/source/java/ch/systemsx/cisd/imagereaders/bioformats/FlexHelper.java b/image_readers/source/java/ch/systemsx/cisd/imagereaders/bioformats/FlexHelper.java index 78aed903c66dde4a370777b5c7a5ae790ff327d1..d1ef872d845947e643bd7ee2e345259880e74880 100644 --- a/image_readers/source/java/ch/systemsx/cisd/imagereaders/bioformats/FlexHelper.java +++ b/image_readers/source/java/ch/systemsx/cisd/imagereaders/bioformats/FlexHelper.java @@ -28,9 +28,11 @@ import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathExpression; import javax.xml.xpath.XPathFactory; +import loci.common.RandomAccessInputStream; import loci.formats.tiff.IFDList; import loci.formats.tiff.TiffParser; +import org.apache.commons.io.IOUtils; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; @@ -63,15 +65,15 @@ public class FlexHelper private static final String SELECT_TILE_YCOORDS = "//Sublayouts/Sublayout/Field/OffsetY/text()"; - private final String fileName; + private final String file; private final String metadataXML; private final Document metadata; - public FlexHelper(String fileName) + public FlexHelper(String file) { - this.fileName = fileName; + this.file = file; try { this.metadataXML = readMetadata(); @@ -157,15 +159,22 @@ public class FlexHelper private String readMetadata() throws Exception { - TiffParser tiffParser = new TiffParser(fileName); - final IFDList ifds = tiffParser.getIFDs(); - if (ifds != null && ifds.get(0) != null) + RandomAccessInputStream in = new RandomAccessInputStream(file); + try { - return ifds.get(0).getIFDStringValue(FLEX); - } else + TiffParser tiffParser = new TiffParser(in); + final IFDList ifds = tiffParser.getIFDs(); + if (ifds != null && ifds.get(0) != null) + { + return ifds.get(0).getIFDStringValue(FLEX); + } else + { + throw new IllegalArgumentException("Cannot parse Flex XML metadata from file " + + file); + } + } finally { - throw new IllegalArgumentException("Cannot parse Flex XML metadata from file " - + fileName); + IOUtils.closeQuietly(in); } }