Hi all -
I've seen several rather frustrated posts from users trying to figure
out how to make JspReader and/or JspGenerator work in Cocoon 2.0.2. This
email describes how.
JspReader
Edit src/java/org/apache/cocoon/reading/JSPReader.java and replace the
following lines (119-132):
// 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().t
oExternalForm();
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);
}
with the following:
String url = this.source;
// -- debug info --
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;
}
JspGenerator
Edit src/java/org/apache/cocoon/generation/JspGenerator.java and replace
the following lines (106-113):
src = this.resolver.resolve(this.source);
String url = src.getSystemId();
// Guarantee src parameter is a file
if (!url.startsWith("file:/"))
throw new IOException("Protocol not supported: " + url);
url = url.substring(5);
getLogger().debug("JspGenerator executing JSP:" + url);
with the following:
String url = this.source;
// 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;
}
The rebuild Cocoon and replace your existing cocoon-2.0.2.jar with the
new one in build/cocoon/webapp/WEB-INF/lib.
Don't forget to copy jasper-compiler.jar from $CATALINA_HOME/lib to
WEB-INF/lib (or whatever JSP compiler you choose to use).
Finally, if you are using a sub-sitemap, any references to JSP files in
pipelines with either JspReader or JspGenerator must have the path
starting from the root cocoon context and MUST start with a leading
forward slash. Thus, if you have a sub-sitemap in a directory called
abc, with a JSP file in abc/jsps/hello.jsp, the src attribute of either
component should be something like:
src="/abc/jsps/hello.jsp"
Cheers,
Lajos
--
galatea.com
Cocoon training, consulting & support
---------------------------------------------------------------------
Please check that your question has not already been answered in the
FAQ before posting. <http://xml.apache.org/cocoon/faq/index.html>
To unsubscribe, e-mail: <[EMAIL PROTECTED]>
For additional commands, e-mail: <[EMAIL PROTECTED]>