froehlich 02/05/24 01:38:13
Modified: src/java/org/apache/cocoon/reading ResourceReader.java
Log:
applied patch from [EMAIL PROTECTED]
patch to get the mime type from the Excalibur source.
Revision Changes Path
1.8 +41 -21
xml-cocoon2/src/java/org/apache/cocoon/reading/ResourceReader.java
Index: ResourceReader.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/reading/ResourceReader.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- ResourceReader.java 20 Mar 2002 20:12:42 -0000 1.7
+++ ResourceReader.java 24 May 2002 08:38:13 -0000 1.8
@@ -51,14 +51,19 @@
package org.apache.cocoon.reading;
import org.apache.avalon.framework.parameters.Parameters;
+
+import org.apache.excalibur.source.Source;
+import org.apache.excalibur.source.SourceException;
+import org.apache.excalibur.source.SourceValidity;
+import org.apache.excalibur.source.impl.validity.TimeStampValidity;
+
import org.apache.cocoon.ProcessingException;
import org.apache.cocoon.caching.CacheValidity;
import org.apache.cocoon.caching.Cacheable;
-import org.apache.cocoon.caching.TimeStampCacheValidity;
+import org.apache.cocoon.caching.SourceCacheValidity;
import org.apache.cocoon.environment.Context;
import org.apache.cocoon.environment.ObjectModelHelper;
import org.apache.cocoon.environment.Response;
-import org.apache.cocoon.environment.Source;
import org.apache.cocoon.environment.SourceResolver;
import org.apache.cocoon.util.HashUtil;
import org.xml.sax.SAXException;
@@ -86,7 +91,7 @@
* </dl>
*
* @author <a href="mailto:[EMAIL PROTECTED]">Giacomo Pati</a>
- * @version CVS $Id: ResourceReader.java,v 1.7 2002/03/20 20:12:42 vgritsenko Exp $
+ * @version CVS $Id: ResourceReader.java,v 1.8 2002/05/24 08:38:13 froehlich Exp $
*/
public class ResourceReader
extends AbstractReader
@@ -104,15 +109,20 @@
public void setup(SourceResolver resolver, Map objectModel, String src,
Parameters par)
throws ProcessingException, SAXException, IOException {
super.setup(resolver, objectModel, src, par);
- this.inputSource = this.resolver.resolve(super.source);
+ try {
+ this.inputSource = resolver.resolveURI(src);
+ } catch (SourceException se) {
+ getLogger().error("Error during resolving of '" + src + "'.", se);
+ throw new ProcessingException("Error during resolving of '" + src +
"'.", se);
+ }
}
public void recycle() {
- super.recycle();
if (this.inputSource != null) {
- this.inputSource.recycle();
+ super.resolver.release( this.inputSource );
this.inputSource = null;
}
+ super.recycle();
}
/**
@@ -122,7 +132,7 @@
* @return The generated key hashes the src
*/
public long generateKey() {
- if (this.inputSource.getLastModified() != 0) {
+ if (this.inputSource.getValidity() != null) {
return HashUtil.hash(this.inputSource.getSystemId());
}
return 0;
@@ -135,8 +145,8 @@
* component is currently not cacheable.
*/
public CacheValidity generateValidity() {
- if (this.inputSource.getLastModified() != 0) {
- return new TimeStampCacheValidity(this.inputSource.getLastModified());
+ if (this.inputSource.getValidity() != null) {
+ return new SourceCacheValidity(this.inputSource.getValidity());
}
return null;
}
@@ -146,7 +156,11 @@
* possible to detect
*/
public long getLastModified() {
- return this.inputSource.getLastModified();
+ final SourceValidity validity = this.inputSource.getValidity();
+ if (validity instanceof TimeStampValidity) {
+ return ((TimeStampValidity)validity).getTimeStamp();
+ }
+ return 0;
}
/**
@@ -163,26 +177,28 @@
response.setDateHeader("Expires", System.currentTimeMillis() +
expires);
}
- long contentLength = this.inputSource.getContentLength();
- if (contentLength != -1) {
- // FIXME (VG): Environment has setContentLength, and
- // Response interface has not. Strange.
- response.setHeader("Content-Length", Long.toString(contentLength));
- }
- response.setHeader("Accept-Ranges", "bytes");
-
byte[] buffer = new byte[8192];
int length = -1;
+ long contentLength = 0;
InputStream inputStream = this.inputSource.getInputStream();
while ((length = inputStream.read(buffer)) > -1) {
out.write(buffer, 0, length);
+ contentLength += length;
}
+
+ // FIXME (VG): Environment has setContentLength, and
+ // Response interface has not. Strange.
+ response.setHeader("Content-Length", Long.toString(contentLength));
+ response.setHeader("Accept-Ranges", "bytes");
+
inputStream.close();
inputStream = null;
out.flush();
} catch (IOException ioe) {
- getLogger().debug("Received an IOException, assuming client severed
connection on purpose");
+ getLogger().error("Received an IOException, assuming client severed
connection on purpose", ioe);
+ } catch (SourceException se) {
+ getLogger().error("Received an SourceException, assuming client severed
connection on purpose", se);
}
}
@@ -193,9 +209,13 @@
Context ctx = ObjectModelHelper.getContext(this.objectModel);
if (ctx != null) {
- return ctx.getMimeType(this.source);
+ if (ctx.getMimeType(this.source)!=null) {
+ return ctx.getMimeType(this.source);
+ } else {
+ return this.inputSource.getMimeType();
+ }
} else {
- return null;
+ return this.inputSource.getMimeType();
}
}
----------------------------------------------------------------------
In case of troubles, e-mail: [EMAIL PROTECTED]
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]