[Yanel-commits] rev 36933 -
public/yanel/trunk/src/core/java/org/wyona/yanel/core/source
michi at wyona.com
michi at wyona.com
Mon Jun 2 16:32:02 CEST 2008
Author: michi
Date: 2008-06-02 16:32:02 +0200 (Mon, 02 Jun 2008)
New Revision: 36933
Modified:
public/yanel/trunk/src/core/java/org/wyona/yanel/core/source/SourceResolver.java
Log:
check for scheme of base and try to resolve accordingly
Modified: public/yanel/trunk/src/core/java/org/wyona/yanel/core/source/SourceResolver.java
===================================================================
--- public/yanel/trunk/src/core/java/org/wyona/yanel/core/source/SourceResolver.java 2008-06-02 14:07:49 UTC (rev 36932)
+++ public/yanel/trunk/src/core/java/org/wyona/yanel/core/source/SourceResolver.java 2008-06-02 14:32:02 UTC (rev 36933)
@@ -8,6 +8,7 @@
import org.apache.log4j.Category;
import org.wyona.yanel.core.Resource;
+import org.wyona.commons.io.PathUtil;
/**
* Resolves a URI to a Source.
@@ -27,27 +28,55 @@
this.resolvers = new HashMap();
}
+ /**
+ *
+ */
public Source resolve(String uri, String base) throws SourceException {
if (log.isDebugEnabled()) {
- log.debug("resolving: " + uri);
+ log.debug("URI to be resolved: " + uri);
+ log.debug("Base: "+ base);
}
- int colonIndex = uri.indexOf(":");
- if (colonIndex <= 0) {
- throw new SourceException("invalid url syntax (missing scheme): " + uri);
+
+ int colonIndex = uri.indexOf(":/");
+ String uriScheme = "";
+ if (colonIndex <= 0) {//Check for scheme in URI, if true, then URI has no scheme
+ //log.error("DEBUG: URI has no scheme: " + uri);
+ if (base != null) {
+ int colBaseIndex = base.indexOf(":/");
+ if(colBaseIndex <=0 ){//Check for scheme in Base
+ throw new SourceException("invalid url syntax (missing scheme): " + uri);//no scheme found in uri and base
+ }else{//base contains scheme. Use base scheme for uri scheme
+ uriScheme = base.substring(0, colBaseIndex);
+ uri = PathUtil.concat(base,uri);
+ //log.error("DEBUG: Use scheme of base: " + uriScheme + ", " + uri);
+ }
+ } else {
+ log.error("Neither scheme for URI nor base specified for URI: " + uri);
+ throw new SourceException("invalid url syntax (missing scheme): " + uri);//no scheme found in uri and base
+ }
+ } else {//uri contains scheme
+ uriScheme = uri.substring(0, colonIndex);
+ //log.error("DEBUG: URI has scheme: " + uriScheme + ", " + uri);
}
- String scheme = uri.substring(0, colonIndex);
- URIResolver resolver = getResolver(scheme);
+
+ URIResolver resolver = getResolver(uriScheme);
if (resolver != null) {
try {
- return resolver.resolve(uri, base);
+ // TODO: What shall be used as base?!
+ Source s = resolver.resolve(uri, base);
+ s.setSystemId(uri);
+ return s;
} catch (TransformerException e) {
throw new SourceException(e.getMessage(), e);
}
} else {
- throw new SourceException("unknown scheme: " + scheme);
+ throw new SourceException("No resolver could be loaded for scheme: " + uriScheme);
}
}
+ /**
+ *
+ */
private URIResolver getResolver(String scheme) {
URIResolver resolver = null;
if (this.resolvers.containsKey(scheme)) {
More information about the Yanel-commits
mailing list