public final class SystemIdResolver
extends java.lang.Object
implements org.xml.sax.EntityResolver, org.xml.sax.ext.EntityResolver2
ResourceLoader
. Just plug this class
on top of a ResourceLoader
and pass it as EntityResolver
to SAX parsers
or via wrapper methods as URIResolver
to XSL transformers or XMLResolver
to STAX parsers.
The resolver handles special SystemIds with an URI scheme of solrres:
that point
to resources. To produce such systemIds when you initially call the parser, use
createSystemIdFromResourceName(java.lang.String)
which produces a SystemId that can
be included along the InputStream coming from ResourceLoader.openResource(java.lang.String)
.
In general create the InputSource
to be passed to the parser like:
InputSource is = new InputSource(loader.openSchema(name)); is.setSystemId(SystemIdResolver.createSystemIdFromResourceName(name)); final DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); db.setEntityResolver(new SystemIdResolver(loader)); Document doc = db.parse(is);
Modifier and Type | Field and Description |
---|---|
private ResourceLoader |
loader |
private static org.slf4j.Logger |
log |
static java.lang.String |
RESOURCE_LOADER_AUTHORITY_ABSOLUTE |
static java.lang.String |
RESOURCE_LOADER_URI_SCHEME |
Constructor and Description |
---|
SystemIdResolver(ResourceLoader loader) |
Modifier and Type | Method and Description |
---|---|
org.xml.sax.EntityResolver |
asEntityResolver() |
javax.xml.transform.URIResolver |
asURIResolver() |
javax.xml.stream.XMLResolver |
asXMLResolver() |
static java.lang.String |
createSystemIdFromResourceName(java.lang.String name) |
org.xml.sax.InputSource |
getExternalSubset(java.lang.String name,
java.lang.String baseURI) |
org.xml.sax.InputSource |
resolveEntity(java.lang.String publicId,
java.lang.String systemId) |
org.xml.sax.InputSource |
resolveEntity(java.lang.String name,
java.lang.String publicId,
java.lang.String baseURI,
java.lang.String systemId) |
(package private) java.net.URI |
resolveRelativeURI(java.lang.String baseURI,
java.lang.String systemId) |
private static final org.slf4j.Logger log
public static final java.lang.String RESOURCE_LOADER_URI_SCHEME
public static final java.lang.String RESOURCE_LOADER_AUTHORITY_ABSOLUTE
private final ResourceLoader loader
public SystemIdResolver(ResourceLoader loader)
public org.xml.sax.EntityResolver asEntityResolver()
public javax.xml.transform.URIResolver asURIResolver()
public javax.xml.stream.XMLResolver asXMLResolver()
java.net.URI resolveRelativeURI(java.lang.String baseURI, java.lang.String systemId) throws java.io.IOException, java.net.URISyntaxException
java.io.IOException
java.net.URISyntaxException
public org.xml.sax.InputSource getExternalSubset(java.lang.String name, java.lang.String baseURI)
getExternalSubset
in interface org.xml.sax.ext.EntityResolver2
public org.xml.sax.InputSource resolveEntity(java.lang.String name, java.lang.String publicId, java.lang.String baseURI, java.lang.String systemId) throws java.io.IOException
resolveEntity
in interface org.xml.sax.ext.EntityResolver2
java.io.IOException
public org.xml.sax.InputSource resolveEntity(java.lang.String publicId, java.lang.String systemId) throws java.io.IOException
resolveEntity
in interface org.xml.sax.EntityResolver
java.io.IOException
public static java.lang.String createSystemIdFromResourceName(java.lang.String name)