Hi,

The JAXP 1.2 schema properties are only relevant to XML Schema validation.
They have nothing to do with loading DTDs. Try using an EntityResolver [1]
instead.

Thanks.

[1]
http://xerces.apache.org/xerces2-j/javadocs/api/org/xml/sax/EntityResolver.html

Michael Glavassevich
XML Parser Development
IBM Toronto Lab
E-mail: mrgla...@ca.ibm.com
E-mail: mrgla...@apache.org

DeWayne <dewayne.c.dantz...@boeing.com> wrote on 11/10/2009 01:06:54 PM:

> According to the documentation at Sun documentation
> (http://java.sun.com/webservices/reference/tutorials/jaxp/html/sax.html),
"
> When the application specifies the schema to use, it overrides any schema
> declaration in the document.". I've tried to setup a SAXParser on an
HP-UX
> box using Xerces-J-2.9.1 which is JAXP1.2 compliant to use an external
DTD
> rather than the one specified in the document.
>
> What am I missing to get the Parser to ignore the internal DTD and use an
> external one?
>
> snippet - XML file has a DOCTYPE declaration:
> ======================================
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE mpd SYSTEM "mpboe03.dtd" [
> <!ENTITY % isobox PUBLIC "-//W3C//ENTITIES Box and Line Drawing//EN//XML"
> "http://www.w3.org/2003/entities/2007/isobox.ent";
> >
>  %isobox;
>
> snippet - code:
> =======================================================================
>    private static final String JAXP_SCHEMA_SOURCE =
> "http://java.sun.com/xml/jaxp/properties/schemaSource";;
>    private static final String JAXP_SCHEMA_LANGUAGE =
> "http://java.sun.com/xml/jaxp/properties/schemaLanguage";;
>     private static final String W3C_XML_SCHEMA =
> "http://www.w3.org/2001/XMLSchema";;
>
>       try {
> //1.  Create a SAXParserFactory object.
>          SAXParserFactory spf = SAXParserFactory.newInstance();
>
> //2. Set the namespace-aware and validating properties to true.
>                    spf.setNamespaceAware(true);
>                    spf.setValidating(true);
>
> //  3. Obtain a SAXParser object.
>                    SAXParser saxParser = spf.newSAXParser();
>
>                    parser = saxParser.getXMLReader();
>          parser.setErrorHandler(this);
>
>          // Turn on validation
>          parser.setFeature("http://xml.org/sax/features/validation";,
true);
>
>  //4. Set the properties for the schema language and schema source
>          parser.setProperty(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
>          parser.setProperty(JAXP_SCHEMA_SOURCE, myOwnDTD.getAbsolutePath
());
>
> //5. Parse the document. The parser must have access to an ErrorHandler
> object.
>          parser.parse(file.getAbsolutePath()); // file is the xml
> file to parse
>                      }catch ... // all necessary exceptions
>
> Results:
> ===================================================
> Get an io.FileNotFoundException: The parser is looking for the DTD called
> out in the DOCTYPE declaration instead of using the one specified by the
> coder myOwnDTD.dtd.
>
> java.io.FileNotFoundException: mpboe03.dtd (No such file or directory
> (errno:2))
>         at java.io.FileInputStream.open(Native Method)
>         at java.io.FileInputStream.<init>(FileInputStream.java:106)
>         at java.io.FileInputStream.<init>(FileInputStream.java:66)
>         at
> sun.net.www.protocol.file.FileURLConnection.connect
(FileURLConnection.java:70)
>         at
> sun.net.www.protocol.file.FileURLConnection.getInputStream
> (FileURLConnection.java:161)
>         at
> org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown
Source)
>         at org.apache.xerces.impl.XMLEntityManager.startEntity(Unknown
> Source)
>         at org.apache.xerces.impl.XMLEntityManager.startDTDEntity(Unknown
> Source)
>         at org.apache.xerces.impl.XMLDTDScannerImpl.setInputSource
(Unknown
> Source)
>         at
> org.apache.xerces.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch
(Unknown
> Source)
>         at
> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument
(Unknown
> Source)
>         at org.apache.xerces.parsers.XML11Configuration.parse(Unknown
> Source)
>         at org.apache.xerces.parsers.XML11Configuration.parse(Unknown
> Source)
>         at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
>         at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown
Source)
>         at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse
(Unknown
> Source)
>         at JavaXMLParse.parse(JavaXMLParse.java:103)
>         at JavaXMLParse.main(JavaXMLParse.java:154)
>
> --
> View this message in context: http://old.nabble.com/How-to-ignore-
> the-DTD-called-out-in-DOCTYPE-declaration-and-use-one-specified-by-
> the-user--tp26287359p26287359.html
> Sent from the Xerces - J - Users mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: j-users-unsubscr...@xerces.apache.org
> For additional commands, e-mail: j-users-h...@xerces.apache.org

Reply via email to