Hi Olav,

this is a bug in the Crimson parser, you'll have to use another parser (like Xerces, Aelfred, ...)

for instance, you could specify the XmlReader class like this:
SAXReader reader = new SAXReader("org.apache.xerces.parsers.SAXParser");

of course, you can specify the parser of your choice in the same way.

Does this solve your problem ?

regards,
Maarten

Olav Müller wrote:

Hiho,

I'm fairly new to the use of dom4j (using 1.5 beta1) and get the
following exception while parsing an xml File, read via
ClassLoader.getSystemResourceAsStream( ... )

org.xml.sax.SAXParseException: Relative URI "Templatedatei.dtd"; kann nicht ohne eine 
Basis-URI aufgelöst werden.
       at org.apache.crimson.parser.Parser2.fatal(Parser2.java:3339)
       at org.apache.crimson.parser.Parser2.fatal(Parser2.java:3333)
       at org.apache.crimson.parser.Parser2.resolveURI(Parser2.java:2915)
       at org.apache.crimson.parser.Parser2.maybeExternalID(Parser2.java:2887)
       at org.apache.crimson.parser.Parser2.maybeDoctypeDecl(Parser2.java:1276)
       at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:623)
       at org.apache.crimson.parser.Parser2.parse(Parser2.java:333)
       at org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:448)
       at org.dom4j.io.SAXReader.read(SAXReader.java:323)
       ...


These are the first few line of my XML File:


<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE NachrichtenTemplates SYSTEM "Templatedatei.dtd">
<NachrichtenTemplates>
       <Template>
       ...

The XML file is valid.

*snip - part of code*
try {
   SAXReader reader = new SAXReader();
   reader.setIncludeExternalDTDDeclarations( false );
   reader.setEntityResolver( new EntityResolver() {
       public InputSource resolveEntity( String publicID, String systemID ) {
           log.info( "please resolve me: " + publicID + ":" + systemID );
           if( systemID.indexOf( "Templatedatei.dtd" ) != -1 ) {
               log.info( "Externe Templatedatei.dtd identifiziert: \"" + systemID + "\", 
lade interne Templatedatei.dtd aus SystemRessources" );
               return new InputSource( ClassLoader.getSystemResourceAsStream( 
"configuration/dtd/Templatedatei.dtd" ) );
           }
           log.error( "Unbekannte Entity \"" + systemID + "\"" );
           throw new RuntimeException();
       }
   });
   document = reader.read( ClassLoader.getSystemResourceAsStream( 
"configuration/Templates.xml" ) );
   ...
* snip - end of code *

My entity resolver never gets used.

Can anyone help me with this one? Or maybe just give me a pointer
where this has been discussed before? Thanks very much.






------------------------------------------------------- This SF.Net email is sponsored by: IBM Linux Tutorials Free Linux tutorial presented by Daniel Robbins, President and CEO of GenToo technologies. Learn everything from fundamentals to system administration.http://ads.osdn.com/?ad_id70&alloc_id638&op=click _______________________________________________ dom4j-user mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/dom4j-user

Reply via email to