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--