From 43e57a42832ea8b4ceb0317f3c9028a4174ffa7b Mon Sep 17 00:00:00 2001
From: mcentner 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
.
- *
- * @author Patrick Peck
- * @author Sven Aigner
- */
-public class MOAEntityResolver implements EntityResolver {
-
- /**
- * 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 (Logger.isDebugEnabled()) {
- Logger.debug(
- new LogMsg("resolveEntity: p=" + publicId + " s=" + systemId));
- }
-
- 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(
- Constants.SCHEMA_ROOT + "XMLSchema.dtd"));
- } else if (publicId.equalsIgnoreCase("datatypes")) {
- return new InputSource(
- getClass().getResourceAsStream(
- Constants.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(Constants.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