kpiroumian 02/04/22 04:17:00
Modified: src/java/org/apache/cocoon/reading Tag: cocoon_2_0_3_branch
JSPReader.java
Log:
Allow relative paths in sitemap.
Fixes: http://nagoya.apache.org/bugzilla/show_bug.cgi?id=2631
Revision Changes Path
No revision
No revision
1.4.2.1 +41 -45 xml-cocoon2/src/java/org/apache/cocoon/reading/JSPReader.java
Index: JSPReader.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/reading/JSPReader.java,v
retrieving revision 1.4
retrieving revision 1.4.2.1
diff -u -r1.4 -r1.4.2.1
--- JSPReader.java 22 Feb 2002 07:03:54 -0000 1.4
+++ JSPReader.java 22 Apr 2002 11:17:00 -0000 1.4.2.1
@@ -50,31 +50,33 @@
*/
package org.apache.cocoon.reading;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
import org.apache.avalon.excalibur.pool.Poolable;
import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.component.Composable;
+
import org.apache.cocoon.ProcessingException;
import org.apache.cocoon.components.jsp.JSPEngine;
import org.apache.cocoon.environment.Source;
+import org.apache.cocoon.environment.Context;
+import org.apache.cocoon.environment.ObjectModelHelper;
import org.apache.cocoon.environment.http.HttpEnvironment;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.IOException;
-
/**
- * @author <a href="mailto:[EMAIL PROTECTED]">Konstantin Piroumian</a>
- * @version CVS $Id: JSPReader.java,v 1.4 2002/02/22 07:03:54 cziegeler Exp $
- *
* The <code>JSPReader</code> component is used to serve JSP page output data
* in a sitemap pipeline.
+ *
+ * @author <a href="mailto:[EMAIL PROTECTED]">Konstantin Piroumian</a>
+ * @version CVS $Id: JSPReader.java,v 1.4.2.1 2002/04/22 11:17:00 kpiroumian Exp $
*/
-public class JSPReader extends AbstractReader
- implements Composable, Poolable{
+public class JSPReader extends AbstractReader implements Composable, Poolable {
private ComponentManager manager;
@@ -82,26 +84,15 @@
this.manager = manager;
}
- /** Contextualize this class
- public void contextualize(Context context) throws ContextException {
- if (this.contextDir == null) {
- org.apache.cocoon.environment.Context ctx =
- (org.apache.cocoon.environment.Context)
context.get(Constants.CONTEXT_ENVIRONMENT_CONTEXT);
- try {
- this.contextDir = new
File(ctx.getRealPath("/")).toURL().toExternalForm();
- getLogger().debug("JSPReader: Context directory is " +
this.contextDir);
- } catch (MalformedURLException e) {
- getLogger().error("JSPReader: Could not get context directory", e);
- throw new ContextException("JSPReader: Could not get context
directory", e);
- }
- }
- }
- */
/**
* Generates the output from JSP page.
*/
public void generate() throws IOException, ProcessingException {
// ensure that we are running in a servlet environment
+ if (this.source == null) {
+ throw new ProcessingException("JSPReader: source JSP is not specified");
+ }
+
HttpServletResponse httpResponse =
(HttpServletResponse)this.objectModel.get(HttpEnvironment.HTTP_RESPONSE_OBJECT);
HttpServletRequest httpRequest =
@@ -114,28 +105,34 @@
}
JSPEngine engine = null;
- Source src = null;
try {
- // KP: A hacky way of source resolving.
- // Why context:// protocol returns not a string in URL format,
- // but a system-dependent path with 'file:' prefix?
- String contextDir = new
File(httpContext.getRealPath("/")).toURL().toExternalForm();
- src = this.resolver.resolve(this.source);
- String url = src.getSystemId();
- if(url.startsWith(contextDir)) {
- // File is located under contextDir, using relative file name
- url = url.substring(contextDir.length());
- }
- if (url.startsWith("file:")) {
- // we need a relative path
- url = url.substring(5);
+
+ // FIXME (KP): Should we exclude not supported protocols, say 'context'?
+ String url = this.source;
+
+ // -- debug info --
+ Source src = resolver.resolve(url);
+ System.out.println("Resolved to: " + src);
+ java.net.URL resURL = httpContext.getResource(".");
+ System.out.println(". resource is: " + resURL);
+ // -- end debug --
+
+
+ // absolute path is processed as is
+ if (!url.startsWith("/")) {
+ // get current request path
+ String servletPath = httpRequest.getServletPath();
+ // remove file part
+ servletPath = servletPath.substring(0, servletPath.lastIndexOf('/')
+ 1);
+ url = servletPath + url;
}
+ engine = (JSPEngine)this.manager.lookup(JSPEngine.ROLE);
+
getLogger().debug("JSPReader executing JSP:" + url);
- engine = (JSPEngine)this.manager.lookup(JSPEngine.ROLE);
byte[] bytes = engine.executeJSP(url, httpRequest, httpResponse,
httpContext);
-
+ // FIXME (KP): Make buffer size configurable
byte[] buffer = new byte[8192];
int length = -1;
@@ -160,7 +157,6 @@
getLogger().debug("Exception in JSPReader.generate()", e);
throw new ProcessingException("Exception JSPReader.generate()",e);
} finally {
- if (src != null) src.recycle();
if (engine != null) this.manager.release(engine);
}
}
----------------------------------------------------------------------
In case of troubles, e-mail: [EMAIL PROTECTED]
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]