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]