You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by br...@apache.org on 2003/07/04 15:55:10 UTC
cvs commit: cocoon-2.1/src/java/org/apache/cocoon/xml XMLBaseSupport.java
bruno 2003/07/04 06:55:10
Modified: src/java/org/apache/cocoon/transformation
XIncludeTransformer.java
src/java/org/apache/cocoon/xml XMLBaseSupport.java
Log:
Avoid resolving the same URI twice.
Revision Changes Path
1.7 +4 -3 cocoon-2.1/src/java/org/apache/cocoon/transformation/XIncludeTransformer.java
Index: XIncludeTransformer.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/transformation/XIncludeTransformer.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- XIncludeTransformer.java 4 Jul 2003 09:45:17 -0000 1.6
+++ XIncludeTransformer.java 4 Jul 2003 13:55:09 -0000 1.7
@@ -371,7 +371,7 @@
href = this.href;
}
- url = resolver.resolveURI(xmlBaseSupport.makeAbsolute(href));
+ url = xmlBaseSupport.makeAbsolute(href);
if (getLogger().isDebugEnabled()) {
getLogger().debug("URL: " + url.getURI() + "\nSuffix: " + suffix);
}
@@ -442,7 +442,8 @@
} catch (SourceException se) {
throw SourceUtil.handle(se);
} finally {
- resolver.release(url);
+ if (url != null)
+ resolver.release(url);
}
}
1.3 +21 -19 cocoon-2.1/src/java/org/apache/cocoon/xml/XMLBaseSupport.java
Index: XMLBaseSupport.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/xml/XMLBaseSupport.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- XMLBaseSupport.java 7 Jun 2003 21:16:10 -0000 1.2
+++ XMLBaseSupport.java 4 Jul 2003 13:55:10 -0000 1.3
@@ -101,7 +101,15 @@
level++;
String base = attrs.getValue(XMLBASE_NAMESPACE_URI, XMLBASE_ATTRIBUTE);
if (base != null) {
- String baseUrl = resolve(getCurrentBase(), base);
+ Source baseSource = null;
+ String baseUrl;
+ try {
+ baseSource = resolve(getCurrentBase(), base);
+ baseUrl = baseSource.getURI();
+ } finally {
+ if (baseSource != null)
+ resolver.release(baseSource);
+ }
bases.push(new BaseInfo(baseUrl, level));
}
}
@@ -112,37 +120,31 @@
level--;
}
- private String resolve(String baseURI, String location) throws SAXException {
+ /**
+ * Warning: do not forget to release the source returned by this method.
+ */
+ private Source resolve(String baseURI, String location) throws SAXException {
try {
- String url;
+ Source source;
if (baseURI != null) {
- Source source = resolver.resolveURI(location, baseURI, Collections.EMPTY_MAP);
- try {
- url = source.getURI();
- } finally {
- resolver.release(source);
- }
+ source = resolver.resolveURI(location, baseURI, Collections.EMPTY_MAP);
} else {
- Source source = resolver.resolveURI(location);
- try {
- url = source.getURI();
- } finally {
- resolver.release(source);
- }
+ source = resolver.resolveURI(location);
}
if (logger.isDebugEnabled())
- logger.debug("XMLBaseSupport: resolved location " + location + " against base URI " + baseURI + " to " + url);
- return url;
+ logger.debug("XMLBaseSupport: resolved location " + location + " against base URI " + baseURI + " to " + source.getURI());
+ return source;
} catch (IOException e) {
throw new SAXException("XMLBaseSupport: problem resolving uri.", e);
}
}
/**
- * Makes the given path absolute based on the current base URL.
+ * Makes the given path absolute based on the current base URL. Do not forget to release
+ * the returned source object!
* @param spec any URL (relative or absolute, containing a scheme or not)
*/
- public String makeAbsolute(String spec) throws SAXException {
+ public Source makeAbsolute(String spec) throws SAXException {
return resolve(getCurrentBase(), spec);
}