From 759ac5f42c6aff901dbeede4fbf1a1d2e08cad0f Mon Sep 17 00:00:00 2001
From: Thomas Lenz The following DTDs are mapped to local resources:
- * EntityResolver
that looks up entities stored as
- * local resources.
- *
- *
- *
- *
For all other resources, an attempt is made to resolve them as resources,
- * either absolute or relative to Constants.SCHEMA_ROOT
.
- *
- */
-public class EAAFDomEntityResolver implements EntityResolver {
- private static final Logger log = LoggerFactory.getLogger(EAAFDomEntityResolver.class);
-
- /**
- * Resolve an entity.
- *
- * The systemId
parameter is used to perform the lookup of the
- * entity as a resource, either by interpreting the systemId
as
- * an absolute resource path, or by appending the last path component of
- * systemId
to Constants.SCHEMA_ROOT
.
- *
- * @param publicId The public ID of the resource.
- * @param systemId The system ID of the resource.
- * @return An InputSource
from which the entity can be read, or
- * null
, if the entity could not be found.
- * @see org.xml.sax.EntityResolver#resolveEntity(java.lang.String, java.lang.String)
- */
- public InputSource resolveEntity(String publicId, String systemId) {
- InputStream stream;
- int slashPos;
-
- if (publicId != null) {
- // check if we can resolve some standard dtd's
- if (publicId.equalsIgnoreCase("-//W3C//DTD XMLSchema 200102//EN")) {
- return new InputSource(
- getClass().getResourceAsStream(
- XMLNamespaceConstants.SCHEMA_ROOT + "XMLSchema.dtd"));
- } else if (publicId.equalsIgnoreCase("datatypes")) {
- return new InputSource(
- getClass().getResourceAsStream(
- XMLNamespaceConstants.SCHEMA_ROOT + "datatypes.dtd"));
- }
- } else if (systemId != null) {
- // get the URI path
- try {
- URI uri = new URI(systemId);
- systemId = uri.getPath();
-
- if (!"file".equals(uri.getScheme()) || "".equals(systemId.trim())) {
- return null;
- }
-
- } catch (MalformedURIException e) {
- return null;
- }
-
- // try to get the resource from the full path
- stream = getClass().getResourceAsStream(systemId);
- if (stream != null) {
- InputSource source = new InputSource(stream);
-
- source.setSystemId(systemId);
- return source;
- }
-
- // try to get the resource from the last path component
- slashPos = systemId.lastIndexOf('/');
- if (slashPos >= 0 && systemId.length() > slashPos) {
- systemId = systemId.substring(slashPos + 1, systemId.length());
- stream =
- getClass().getResourceAsStream(XMLNamespaceConstants.SCHEMA_ROOT + systemId);
- if (stream != null) {
- InputSource source = new InputSource(stream);
-
- source.setSystemId(systemId);
- return source;
- }
- }
- }
-
- return null; // nothing found - let the parser handle the entity
- }
-}
\ No newline at end of file
--
cgit v1.2.3