xml-general mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Gary L Peskin" <ga...@firstech.com>
Subject RE: EntityResolver Issues (JAXP)
Date Thu, 05 Sep 2002 19:05:29 GMT
You should probably take this over to one of the Xerces lists where you
can get xerces-specific help.  Just from looking at your log times, it
looks your entity resolver may have been called in a different parse
than the one generating the error since there is such a long time
between the two log entries.

Just a guess,
Gary

> -----Original Message-----
> From: Brendan W. McAdams [mailto:b.mcadams@themunicenter.com] 
> Sent: Thursday, September 05, 2002 11:20 AM
> To: general@xml.apache.org
> Subject: EntityResolver Issues (JAXP)
> 
> 
> I'm writing a new set of parsers for my company's B2B API 
> using the DOM under JAXP (Summer '02 release from Sun).
> 
> Typically, XML messages our applications receive will get a 
> DTD Header in them, which is plainly: <!DOCTYPE 
> Acknowledgement SYSTEM \"TMC_Ack.dtd\"> 
> 
> By default, I found that JAXP was turning the systemId into a 
> URI which
> was:
> file:///usr/local/tmc/TMC_Ack.dtd 
> 
> (/usr/local/tmc being the home directory of the user running the App).
> 
> This being quite obviously incorrect, I constructed an entity 
> resolved which reads a system configuration value that 
> contains the base directory for DTDs, and returns an input 
> source pointing to the proper
> DTD:
> 
> package com.themunicenter.b2b.xml;
> 
> import org.xml.sax.EntityResolver;
> import org.xml.sax.InputSource;
> 
> import com.muni.util.logger.*;
> 
> import java.io.File;
> 
> public class B2BEntityResolver implements EntityResolver {
>     public InputSource resolveEntity (String publicId, String 
> systemId) {
>         TMCLogger log = TMCLogger.getLogInstance("B2BEntityResolver");
>         File fSID = new File(systemId);
>         String f = fSID.getName();
>         String DTDBase = com.muni.util.MCProps.DTDBASE;
>         String correctDTD = "file://" + DTDBase + "/" + f;
>         log.info(correctDTD);
>         InputSource DTD = new InputSource(correctDTD);
>         log.info(DTD.getSystemId());
>         return DTD;
>         
>     }
> }
> 
> (TMCLogger is a log4j derived logger...MCProps simply reads 
> in constants
> - DTDBase in this case is
> /usr/local/tmc/MuniCenter/com/themunicenter/b2b/xml/DTD)
> 
> My 'initialise and parse' block for the XML is as follows:
> 
>     // Build factory
>         DocumentBuilderFactory factory = 
> DocumentBuilderFactory.newInstance();
>         factory.setValidating(false);
>         
>         log = TMCLogger.getLogInstance(this.getClass());
>         
>         try {
>             DocumentBuilder builder = factory.newDocumentBuilder();
>             builder.setEntityResolver(new B2BEntityResolver());
>             ByteArrayInputStream xmlStream = createStream(xmlDoc);
>             document = builder.parse(xmlStream);          
> 
> As you can see, I register my Entity Resolver...and it works 
> to some level.
> 
> I get this in my logfile:
> 2002-09-05 14:16:58,348 - |B2BEntityResolver|  INFO [main]
> (B2BEntityResolver.java:19) - 
> file:///usr/local/tmc/MuniCenter/com/themunicenter/b2b/xml/DTD
> /TMC_Ack.dtd
> 2002-09-05 14:16:58,656 - |com.themunicenter.b2b.xml.B2BAck| 
> ERROR [main] (B2BMsg.java:48) - *** Parsing error at Line 0; 
> URI: Null Entity File 
> "file:///usr/local/tmc/MuniCenter.non-sales-corp/TMC_Ack.dtd" 
> not found.
>         at
> org.apache.xerces.framework.XMLParser.reportError(XMLParser.java:975)
>         at
> org.apache.xerces.readers.DefaultEntityHandler.startReadingFro
> mExternalEntity(DefaultEntityHandler.java:768)
>         at
> org.apache.xerces.readers.DefaultEntityHandler.startReadingFro
> mExternalSubset(DefaultEntityHandler.java:566)
>         at
> org.apache.xerces.framework.XMLDTDScanner.scanDoctypeDecl(XMLD
> TDScanner.java:1121)
>         at
> org.apache.xerces.framework.XMLDocumentScanner.scanDoctypeDecl
> (XMLDocumentScanner.java:2176)
>         at
> org.apache.xerces.framework.XMLDocumentScanner.access$0(XMLDoc
> umentScanner.java:2133)
>         at
> org.apache.xerces.framework.XMLDocumentScanner$XMLDeclDispatch
> er.dispatch(XMLDocumentScanner.java:775)        at 
> org.apache.xerces.framework.XMLDocumentScanner.parseSome(XMLDo
> cumentScanner.java:380)
>         at
> org.apache.xerces.framework.XMLParser.parse(XMLParser.java:861)
>         at
> org.apache.xerces.jaxp.DocumentBuilderImpl.parse(DocumentBuild
> erImpl.java:123)
>         at
> javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:138)
>         at com.themunicenter.b2b.xml.B2BMsg.<init>(B2BMsg.java:44)
>         at com.themunicenter.b2b.xml.B2BAck.<init>(B2BAck.java:40)
>         at com.themunicenter.b2b.xml.B2BAck.main(B2BAck.java:101)
> 2002-09-05 14:16:58,660 - |com.themunicenter.b2b.xml.B2BAck| 
> ERROR [main] (B2BMsg.java:57) - SAX Parse Exception 
> 2002-09-05 14:16:58,661 - |com.themunicenter.b2b.xml.B2BAck|  
> INFO [main] (B2BAck.java:45) - Initialized B2BAck.parse()
> 
> The EntityResolver is being called, and is returning a proper 
> InputSource with the correct URI to the DTD.
> 
> But the parser seems to be ignoring the new location and I'm 
> at a loss why.
> 
> I need to get this to load the DTD without having to throw my 
> DTDs in an arbitrary directory as a 'hack'.
> 
> Anyone who can help?
> 
> -Brendan
> 
> -- 
> Brendan W. McAdams             | b.mcadams@themunicenter.com
> Senior Applications Developer  | (646) 375-1140
> TheMuniCenter, LLC             | www.themunicenter.com
> 
> perl -e '$_="krJhruaesrltre c a cnp,ohet";$_.=$1,print$2while 
> s/(..)(.)//;'
> 
> "Always listen to experts. They'll tell you what can't be 
> done, and why. Then do it."
> - Robert A. Heinlein
> 
> "I cannot make my days longer, so I strive to make them better."
> - Henry David Thoreau
> 
> ---------------------------------------------------------------------
> In case of troubles, e-mail:     webmaster@xml.apache.org
> To unsubscribe, e-mail:          general-unsubscribe@xml.apache.org
> For additional commands, e-mail: general-help@xml.apache.org
> 


---------------------------------------------------------------------
In case of troubles, e-mail:     webmaster@xml.apache.org
To unsubscribe, e-mail:          general-unsubscribe@xml.apache.org
For additional commands, e-mail: general-help@xml.apache.org


Mime
View raw message