Hi, I want to read in and validate an XML file against a local DTD. I have created a class based on EntityResolver which plugs into the Parser.
However, this seems to be ignored because the parser still attempts to connect over the internet to w3c which I do not want. I know this because of the exception I get when it attempts (see below) See also below my code. Please advise java.net.ConnectException: Connection refused: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(Unknown Source) at java.net.PlainSocketImpl.connectToAddress(Unknown Source) at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at sun.net.NetworkClient.doConnect(Unknown Source) at sun.net.www.http.HttpClient.openServer(Unknown Source) at sun.net.www.http.HttpClient.openServer(Unknown Source) at sun.net.www.http.HttpClient.<init>(Unknown Source) at sun.net.www.http.HttpClient.New(Unknown Source) at sun.net.www.http.HttpClient.New(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:986) at org.apache.xerces.impl.XMLEntityManager.startEntity(XMLEntityManager.java:897) at org.apache.xerces.impl.XMLEntityManager.startDTDEntity(XMLEntityManager.java:864) at org.apache.xerces.impl.XMLDTDScannerImpl.setInputSource(XMLDTDScannerImpl.java:241) at org.apache.xerces.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(XMLDocumentScannerImpl.java:1001) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:324) at org.apache.xerces.parsers.XML11Configuration.parse(XML11Configuration.java:845) at org.apache.xerces.parsers.XML11Configuration.parse(XML11Configuration.java:768) at org.apache.xerces.parsers.XMLParser.parse(XMLParser.java:108) at org.apache.xerces.parsers.DOMParser.parse(DOMParser.java:230) at SerializeTester.test(SerializeTester.java:30) at SerializeTester.main(SerializeTester.java:62) import java.io.File; import java.net.MalformedURLException; import java.net.URL; import org.xml.sax.EntityResolver; import org.xml.sax.InputSource; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.OutputStream; import org.xml.sax.InputSource; import org.w3c.dom.Document; // Parser import import org.apache.xerces.parsers.DOMParser; public class SerializeTester { // File to read XML from private File inputXML; // File to serialize XML to private File outputXML; public SerializeTester(File inputXML) { this.inputXML = inputXML; } public void test(OutputStream outputStream) throws Exception { DOMParser parser = new DOMParser( ); // Get the DOM tree as a Document object parser.parse(new InputSource( new FileInputStream(inputXML))); LocalDTDResolver LocalDTDResolver = new LocalDTDResolver( "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd", new File("C:/svgdtd/svg11.dtd") ); parser.setEntityResolver( LocalDTDResolver ); Document doc = parser.getDocument( ); // Serialize org.w3c.dom.Element w3cSvgTextElement = doc.getElementById( "LABEL_OUTLINE" ); } public static void main(String[] args) { if (args.length != 2) { System.out.println( "Usage: java javaxml3.SerializeTester " + "[XML document to read] " + "[filename to write output to]"); return; } try { SerializeTester tester = new SerializeTester(new File(args[0])); tester.test(new FileOutputStream(new File(args[1]))); } catch (Exception e) { e.printStackTrace( ); } } } public class LocalDTDResolver implements EntityResolver { String mySystemIdToIntercept; File myLocalDtdPath; URL localDtdFileAsUrl; public LocalDTDResolver( String systemIdToIntercept, File localDtdPath ) throws MalformedURLException { mySystemIdToIntercept = systemIdToIntercept; myLocalDtdPath = localDtdPath; localDtdFileAsUrl = myLocalDtdPath.toURI().toURL(); } public InputSource resolveEntity (String publicId, String systemId) { if (systemId.equals( mySystemIdToIntercept )) { return new InputSource( localDtdFileAsUrl.toString() ); } else { // use the default behaviour (?) return null; } } } -- View this message in context: http://www.nabble.com/Xerces-DOM-parser-ignores-EntityResolver-providing-local-DTD-for-validation-tp15806529p15806529.html Sent from the Xerces - J - Users mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]