[jdom-interest] EntityResolver Problem

Cory C. Omand Cory.Omand at Sun.com
Thu Oct 3 17:50:50 PDT 2002


Hello,

I am attempting to parse an XHTML file behind my company firewall.  As I 
cannot access the w3c website directly in order to resolve the DTD 
reference, I have created a custom EntityResolver class to remap the URI 
to a local filesystem path.  The problem is that the XHTML DTD contains 
ENTITY references which are causing problems during parsing.  The 
following code

            org.jdom.input.SAXBuilder builder = new 
org.jdom.input.SAXBuilder();
            builder.setEntityResolver(new StubResolver());
            org.jdom.Document doc;
            try {
                doc = builder.build(parseFile);
            } catch (org.jdom.JDOMException jde) {
                jde.printStackTrace();
                System.exit(1);
            }
            System.out.println("Successfully created a document from " + 
parseFile.getName());

Creates this stack trace when executed:

bash$ java -cp lib/jdom.jar:. SimpleParser index.xhtml
INFO: External Entity http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd 
remapped to ./lib/xhtml1-strict.dtd
org.jdom.JDOMException: Error on line 28: Relative URI "xhtml-lat1.ent"; 
can not be resolved without a base URI.
        at org.jdom.input.SAXBuilder.build(SAXBuilder.java:367)
        at org.jdom.input.SAXBuilder.build(SAXBuilder.java:707)
        at org.jdom.input.SAXBuilder.build(SAXBuilder.java:689)
        at SimpleParser.<init>(SimpleParser.java:20)
        at SimpleParser.main(SimpleParser.java:39)
Caused by: org.xml.sax.SAXParseException: Relative URI "xhtml-lat1.ent"; 
can not be resolved without a base URI.
        at org.apache.crimson.parser.Parser2.fatal(Parser2.java:3182)
        at org.apache.crimson.parser.Parser2.fatal(Parser2.java:3176)
        at org.apache.crimson.parser.Parser2.resolveURI(Parser2.java:2758)
        at 
org.apache.crimson.parser.Parser2.maybeExternalID(Parser2.java:2730)
        at 
org.apache.crimson.parser.Parser2.maybeEntityDecl(Parser2.java:2632)
        at 
org.apache.crimson.parser.Parser2.maybeMarkupDecl(Parser2.java:1210)
        at 
org.apache.crimson.parser.Parser2.externalParameterEntity(Parser2.java:2898)
        at 
org.apache.crimson.parser.Parser2.maybeDoctypeDecl(Parser2.java:1167)
        at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:489)
        at org.apache.crimson.parser.Parser2.parse(Parser2.java:305)
        at 
org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:442)
        at org.jdom.input.SAXBuilder.build(SAXBuilder.java:354)
        ... 4 more
Caused by: org.xml.sax.SAXParseException: Relative URI "xhtml-lat1.ent"; 
can not be resolved without a base URI.
        at org.apache.crimson.parser.Parser2.fatal(Parser2.java:3182)
        at org.apache.crimson.parser.Parser2.fatal(Parser2.java:3176)
        at org.apache.crimson.parser.Parser2.resolveURI(Parser2.java:2758)
        at 
org.apache.crimson.parser.Parser2.maybeExternalID(Parser2.java:2730)
        at 
org.apache.crimson.parser.Parser2.maybeEntityDecl(Parser2.java:2632)
        at 
org.apache.crimson.parser.Parser2.maybeMarkupDecl(Parser2.java:1210)
        at 
org.apache.crimson.parser.Parser2.externalParameterEntity(Parser2.java:2898)
        at 
org.apache.crimson.parser.Parser2.maybeDoctypeDecl(Parser2.java:1167)
        at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:489)
        at org.apache.crimson.parser.Parser2.parse(Parser2.java:305)
        at 
org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:442)
        at org.jdom.input.SAXBuilder.build(SAXBuilder.java:354)
        at org.jdom.input.SAXBuilder.build(SAXBuilder.java:707)
        at org.jdom.input.SAXBuilder.build(SAXBuilder.java:689)
        at SimpleParser.<init>(SimpleParser.java:20)
        at SimpleParser.main(SimpleParser.java:39)
Caused by: org.xml.sax.SAXParseException: Relative URI "xhtml-lat1.ent"; 
can not be resolved without a base URI.
        at org.apache.crimson.parser.Parser2.fatal(Parser2.java:3182)
        at org.apache.crimson.parser.Parser2.fatal(Parser2.java:3176)
        at org.apache.crimson.parser.Parser2.resolveURI(Parser2.java:2758)
        at 
org.apache.crimson.parser.Parser2.maybeExternalID(Parser2.java:2730)
        at 
org.apache.crimson.parser.Parser2.maybeEntityDecl(Parser2.java:2632)
        at 
org.apache.crimson.parser.Parser2.maybeMarkupDecl(Parser2.java:1210)
        at 
org.apache.crimson.parser.Parser2.externalParameterEntity(Parser2.java:2898)
        at 
org.apache.crimson.parser.Parser2.maybeDoctypeDecl(Parser2.java:1167)
        at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:489)
        at org.apache.crimson.parser.Parser2.parse(Parser2.java:305)
        at 
org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:442)
        at org.jdom.input.SAXBuilder.build(SAXBuilder.java:354)
        at org.jdom.input.SAXBuilder.build(SAXBuilder.java:707)
        at org.jdom.input.SAXBuilder.build(SAXBuilder.java:689)
        at SimpleParser.<init>(SimpleParser.java:20)
        at SimpleParser.main(SimpleParser.java:39)

All of the externally reference files (dtd and ent files) are in the 
./lib directory where the XHTML DTD lives.  Can anyone give me a hint as 
to why the SAX parser cannot find these .ent files, and/or how to 
resolve this problem?  I am using JDOM B8 + JDK 1.4.0.

Thanks in advance,
C.




More information about the jdom-interest mailing list