use of com.ibm.jvm.j9.dump.indexsupport.XMLIndexReader in project openj9 by eclipse.
the class DTFJImageFactory method getImage.
private ReleasingImage getImage(File imageFile, InputStream metadata, IFileLocationResolver resolver) throws IOException {
ClosingFileReader reader = new ClosingFileReader(imageFile);
ICoreFileReader core = DumpFactory.createDumpForCore(reader);
XMLIndexReader indexData = new XMLIndexReader();
// CMVC 154851 : pass the metadata stream through the new XML cleanup class
XMLInputStream in = new XMLInputStream(metadata);
ReleasingImage image = indexData.parseIndexWithDump(in, core, reader, resolver);
image.addReleasable(in);
image.addReleasable(reader);
image.addReleasable(core);
if (resolver instanceof ResourceReleaser) {
image.addReleasable((ResourceReleaser) resolver);
}
return image;
}
use of com.ibm.jvm.j9.dump.indexsupport.XMLIndexReader in project openj9 by eclipse.
the class DTFJImageFactory method getImage.
public Image getImage(final ImageInputStream in, final ImageInputStream meta, URI sourceID) throws IOException {
/*
* Legacy core readers implement the ImageInputStream interface, but are backed by an implementation which
* is based around reading bytes directly from the stream without honouring the ByteOrder setting of the stream.
* This has the consequence that the readers expect all streams passes to them to be in BIG_ENDIAN order and
* then internally provide wrapper classes when LITTLE_ENDIAN is required. This is why the stream being
* passed has it's byte order fixed to BIG_ENDIAN.
*/
in.setByteOrder(ByteOrder.BIG_ENDIAN);
ICoreFileReader core = DumpFactory.createDumpForCore(in);
XMLIndexReader indexData = new XMLIndexReader();
// downcast the image input stream to an input stream
InputStream stream = new InputStream() {
@Override
public int read() throws IOException {
return meta.read();
}
};
// CMVC 154851 : pass the metadata stream through the new XML cleanup class
XMLInputStream xmlstream = new XMLInputStream(stream);
IFileLocationResolver resolver = null;
File source = null;
if ((sourceID.getFragment() != null) && (sourceID.getFragment().length() != 0)) {
// need to strip any fragments from the URI which point to the core in the zip file
try {
URI uri = new URI(sourceID.getScheme() + "://" + sourceID.getPath());
source = new File(uri);
} catch (URISyntaxException e) {
// if the URL cannot be constructed then assume it does not point to a file
}
} else {
source = new File(sourceID);
}
if (source.exists()) {
if (FileManager.isArchive(source)) {
ZipFile zip = new ZipFile(source);
resolver = new ZipExtractionResolver(zip);
} else {
resolver = new DefaultFileLocationResolver(source.getParentFile());
}
}
ReleasingImage image = indexData.parseIndexWithDump(xmlstream, core, in, resolver);
// close access to the XML file as we won't be needing it again
meta.close();
// because the IIS is used to derive the core reader only the reader needs to be added as a ReleasingResource
image.addReleasable(core);
if (image instanceof com.ibm.dtfj.image.j9.Image) {
((com.ibm.dtfj.image.j9.Image) image).SetSource(sourceID);
}
return image;
}
Aggregations