[jdom-interest] EntityResolver Problem
Cory C. Omand
Cory.Omand at Sun.com
Fri Oct 4 08:01:47 PDT 2002
Thanks for the response - I did manage to get the EntityResolver to
remap to a local dtd (note the INFO line in the sample output). What
took me a long time was how to get relative URIs *within* that DTD to
resolve. The problem was solved by modifying the InputSource.systemId()
so that future resolutions would look on disk rather than giving up
because they are relative.
Thanks again,
Cory.
Norrman Per wrote:
>Hi,
>
>why not make you remapped URI absolute: file:/x/y/z/lib/xhtml1-strict.dtd
>
>/Per Norrman
>
>-----Original Message-----
>From: Cory C. Omand [mailto:Cory.Omand at Sun.com]
>Sent: Friday, October 04, 2002 2:51 AM
>To: jdom-interest at jdom.org
>Subject: [jdom-interest] EntityResolver Problem
>
>
>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.
>
>_______________________________________________
>To control your jdom-interest membership:
>http://lists.denveronline.net/mailman/options/jdom-interest/youraddr@yourhos
>t.com
>###########################################
>
>This message has been scanned by F-Secure Anti-Virus for Microsoft Exchange.
>For more information, connect to http://www.F-Secure.com/
>
>
>
--
============================================================
Cory C. Omand - Test Engineer Access Line: 510.315.5959
Sun Microsystems Fax: 510.315.5959
Newark, CA USA
============================================================
More information about the jdom-interest
mailing list