hi I'm getting error on
InputStream isP=urlP.openConnection();
Incompatible type for declaration. Can't convert
java.net.URLConnection to java.io.InputStream.
InputStream isP=urlP.openConnection();
^
1 error
what should i do for that ?
cheers.
-----Original Message-----
From:
Nicolas LEHUEN [mailto:nicolas.lehuen@u...]
Sent: 05 September 2001 14:09
To: Sarno, Giuseppe [MAIFP:GM12:EXCH];
'xml-dev@l...'
Subject: RE: load DTD in
memory.
Well, here is a sample class for a in-memory entity
cache (it will therefore
cache DTDs). It is a
dumb cache, because if the original DTD changes, the
cache is not refreshed, but for many cases it is sufficient. We
have
implemented a much more flexible caching
framework, but here it's out of
scope.
import java.net.*;
import
java.util.*;
import org.xml.sax.*;
public class DTDMemoryCache implements EntityResolver
{
private Map cache=new
HashMap();
// Remember to handle synchronization
issues !!
// A dumb but easy
implementation would synchronize the whole
// resolveEntity method
public synchronized InputSource
resolveEntity(String publicIdP,String
systemIdP)
throws SAXException {
// The PUBLIC id is
the key to our cache
byte[]
resultP=cache.get(publicIdP);
if(resultP==null) {
try {
// The SYSTEM id
is the URL used to fetch the entity
URL urlP=new
URL(systemIdP);
InputStream
isP=urlP.openConnection();
ByteArrayOutputStream baosP=new
ByteArrayOutputStream();
// We copy the
input stream into the output stream
// Fast buffer
implementation
// I could have
used BufferInputStream and
OutputStream
// But it's much
slower
int
readP;
byte[]
bufferP=new byte[1024];
while((readP=isP.read(bufferP))>-1) {
baosP.write(bufferP,0,readP);
}
resultP=baosP.toByteArray();
// We store the
result in the cache.
cache.put(publicIdP,resultP);
}
catch(Exception eP) {
throw new SAXException(eP);
}
}
return new
InputSource(new ByteArrayInputStream(resultP));
}
}
Now, how to install this EntityResolver ? Both the
org.xml.sax.Parser and
the
javax.xml.parsers.DocumentBuilder have a setEntityResolver() method
that
enables you to install your own
EntotyResolver before parsing your
documents.
Regards,
Nicolas
-----Message d'origine-----
De :
Giuseppe Sarno [mailto:gsarno@n...]
Envoyé : mercredi 5 septembre 2001 14:47
À : Nicolas LEHUEN; 'xml-dev@l...'
Objet : RE: load DTD in memory.
hi,
thanks for your
answer,
but could you please tell me more on how
to do it since the API doc doesn't
explain it
very well.
cheers.
-----Original
Message-----
From: Nicolas LEHUEN [mailto:nicolas.lehuen@u...]
Sent: 05 September 2001 13:26
To: Sarno, Giuseppe [MAIFP:GM12:EXCH];
'xml-dev@l...'
Subject: RE: load DTD in
memory.
To cache DTDs the easiest thing to do with SAX is to
implement your own
EntityResolver. This way
you'll be able to cache locally or in memory all
entities, amongst them the DTDs.
Regards,
Nicolas
-----Message d'origine-----
De
: Giuseppe Sarno [mailto:gsarno@n...]
Envoyé : mercredi 5 septembre 2001 13:56
À : xml-dev@l...
Objet
: load DTD in memory.
Hi ,
I was wondering ,
in case is needed to parse a lot of XML docs , is it
possible to
load the DTD or Schema one in memory
and always reuse it instead of
reloading it for
each Doc validation ?
cheers.
--------------InterScan_NT_MIME_Boundary--
--------------InterScan_NT_MIME_Boundary--
--------------InterScan_NT_MIME_Boundary--