I use JAXB with SAXParserFactory to read in a xml that contains other inclusions. For example, this following xml is called “TheFile.xml” and it refers to “class_common.xml” .
<!DOCTYPE page [ <!ENTITY class_common SYSTEM "class_common.xml" >]> <api xmlns:denp="http://intranet.denali.com/wiki/DocBook_profiling"> &class_common;
But what I notice is the default location used in SAXParserFactory for “class_common.xml” is where I launch the program . For example, my program is stared from DIR1 and both xml files are in DIR2, SAXParserFactory reads the “TheFile.xml” and tries to look for the “class_common.xml” from DIR1 instead of DIR2. How do I fix this?
The code I have is like the following
cl = class_xml.ObjectFactory.class.getClassLoader(); context = JAXBContext.newInstance("class_xml", cl); Unmarshaller u = context.createUnmarshaller(); SAXParserFactory spf = SAXParserFactory.newInstance(); spf.setXIncludeAware(true); XMLReader xr = (XMLReader) spf.newSAXParser().getXMLReader(); SAXSource source = new SAXSource(xr, new InputSource(new FileInputStream(classXMLFile))); api = (Api) u.unmarshal(source);