Hello,
with my language override menu in working shape, I found one less
wanted behaviour in Forrest. When changing that to a better one, I
encountered a bug.
1) the less-than-optimal behaviour
When switching language using the override menu, the language
selection is not "remembered". Thus, the next document you look at
will be presented in the first language, and you will have to switch
again if you want the other language (the one you selected when
reading the first document). This is normally unwanted behaviour:
when a user switch language, it is usually an action of preference,
which should be remembered (stored in the session, a cookie, the
request - whatever).
The cause:
The main sitemap (in FORREST_HOME/main/webapp) contains the following
settings for LocaleAction:
<map:action name="locale" src="org.apache.cocoon.acting.LocaleAction">
<!-- See http://cocoon.apache.org/2.1/apidocs/org/apache/cocoon/
acting/LocaleAction.html for a description of these parameters -->
<!-- FIXME (FOR-887): make these configurable, using same
parameters for LocaleMatcher and LocaleAction -->
<default-locale language="en" country="US"/>
<use-locale>true</use-locale>
<store-in-request>false</store-in-request>
<create-session>false</create-session> <---
<store-in-session>false</store-in-session> <---
<store-in-cookie>false</store-in-cookie> <---
<locale-attribute>locale</locale-attribute>
</map:action>
These should, in my opinion, be set to 'true' by default.
2) the BUG
When setting the above parameters to true and restarting forrest, the
next time I do the following:
- open http://localhost:8888/index.html (in nb/Norwegian) - ok
- switch to English (?locale=en) - ok
- open another document http://localhost:8888/lang-policy.html - ERROR
I get the bug. The ERROR reported is:
Internal Server Error
Message: null
Description: No details available.
Sender: org.apache.cocoon.servlet.CocoonServlet
Source: Cocoon Servlet
Request URI
lang-policy.html
cause
Could not resolve locationmap location.
request-uri
/lang-policy.html
Apache Cocoon 2.2.0-dev
It seems that the LM does not work well together with session-induced
locale selection. The stack-trace is added below.
Sjur
ERROR (2006-09-21) 09:37.44:913 [access] (/lang-policy.html)
PoolThread-4/CocoonServlet: Internal Cocoon Problem
org.apache.cocoon.ProcessingException: Failed to process pipeline
at <map:serialize type="xhtml"> - file:/usr/local/forrest/build/
plugins/org.apache.forrest.plugin.internal.dispatcher/internal.xmap:
161:39
at <map:transform> - file:/usr/local/forrest/build/plugins/
org.apache.forrest.plugin.internal.dispatcher/internal.xmap:160:13
at <map:transform> - file:/usr/local/forrest/build/plugins/
org.apache.forrest.plugin.internal.dispatcher/internal.xmap:157:13
at <map:transform type="dispatcher"> - file:/usr/local/forrest/build/
plugins/org.apache.forrest.plugin.internal.dispatcher/internal.xmap:
147:42
at <map:generate type="jx"> - file:/usr/local/forrest/build/plugins/
org.apache.forrest.plugin.internal.dispatcher/internal.xmap:142:70
at <map:mount> - file:/Users/sjur/Documents/i18n/sd/build/tmp/
internal.xmap:33:158
at <map:mount> - file:/usr/local/forrest/main/webapp/sitemap.xmap:
410:120
at org.apache.cocoon.ProcessingException.throwLocated
(ProcessingException.java:144)
at
org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.handleE
xception(AbstractProcessingPipeline.java:894)
at
org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.setupPi
peline(AbstractProcessingPipeline.java:370)
at
org.apache.cocoon.components.pipeline.impl.AbstractCachingProcessingPipe
line.setupPipeline(AbstractCachingProcessingPipeline.java:614)
at
org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.prepare
Pipeline(AbstractProcessingPipeline.java:459)
at
org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.process
(AbstractProcessingPipeline.java:409)
at
org.apache.cocoon.components.treeprocessor.sitemap.SerializeNode.invoke(
SerializeNode.java:137)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.
invokeNodes(AbstractParentProcessingNode.java:55)
at
org.apache.cocoon.components.treeprocessor.sitemap.PreparableMatchNode.i
nvoke(PreparableMatchNode.java:116)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.
invokeNodes(AbstractParentProcessingNode.java:77)
at
org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode.invoke
(PipelineNode.java:155)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.
invokeNodes(AbstractParentProcessingNode.java:77)
at
org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode.invoke(
PipelinesNode.java:95)
at
org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.process
(ConcreteTreeProcessor.java:292)
at
org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.process
(ConcreteTreeProcessor.java:223)
at org.apache.cocoon.components.treeprocessor.TreeProcessor.process
(TreeProcessor.java:289)
at
org.apache.cocoon.components.treeprocessor.sitemap.MountNode.invoke
(MountNode.java:114)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.
invokeNodes(AbstractParentProcessingNode.java:77)
at
org.apache.cocoon.components.treeprocessor.sitemap.SelectNode.invoke
(SelectNode.java:81)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.
invokeNodes(AbstractParentProcessingNode.java:77)
at
org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode.invoke
(PipelineNode.java:155)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.
invokeNodes(AbstractParentProcessingNode.java:77)
at
org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode.invoke(
PipelinesNode.java:95)
at
org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.process
(ConcreteTreeProcessor.java:292)
at
org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.process
(ConcreteTreeProcessor.java:223)
at org.apache.cocoon.components.treeprocessor.TreeProcessor.process
(TreeProcessor.java:289)
at
org.apache.cocoon.components.treeprocessor.sitemap.MountNode.invoke
(MountNode.java:114)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.
invokeNodes(AbstractParentProcessingNode.java:77)
at
org.apache.cocoon.components.treeprocessor.sitemap.SelectNode.invoke
(SelectNode.java:81)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.
invokeNodes(AbstractParentProcessingNode.java:77)
at
org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode.invoke
(PipelineNode.java:155)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.
invokeNodes(AbstractParentProcessingNode.java:77)
at
org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode.invoke(
PipelinesNode.java:95)
at
org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.process
(ConcreteTreeProcessor.java:292)
at
org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.process
(ConcreteTreeProcessor.java:223)
at org.apache.cocoon.components.treeprocessor.TreeProcessor.process
(TreeProcessor.java:289)
at org.apache.cocoon.Cocoon.process(Cocoon.java:557)
at org.apache.cocoon.servlet.CocoonServlet.service
(CocoonServlet.java:364)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:
354)
at org.mortbay.jetty.servlet.WebApplicationHandler.dispatch
(WebApplicationHandler.java:294)
at org.mortbay.jetty.servlet.ServletHandler.handle
(ServletHandler.java:567)
at org.mortbay.http.HttpContext.handle(HttpContext.java:1808)
at org.mortbay.jetty.servlet.WebApplicationContext.handle
(WebApplicationContext.java:525)
at org.mortbay.http.HttpContext.handle(HttpContext.java:1758)
at org.mortbay.http.HttpServer.service(HttpServer.java:879)
at org.mortbay.http.HttpConnection.service(HttpConnection.java:790)
at org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:952)
at org.mortbay.http.HttpConnection.handle(HttpConnection.java:807)
at org.mortbay.http.SocketListener.handleConnection
(SocketListener.java:197)
at org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:289)
at org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:501)
Caused by: org.apache.cocoon.ProcessingException: Error during
resolving of 'lm://resolve.structurer.lang-policy'.
at <map:serialize> - file:/usr/local/forrest/build/plugins/
org.apache.forrest.plugin.internal.dispatcher/internal.xmap:97:26
at <map:generate> - file:/usr/local/forrest/build/plugins/
org.apache.forrest.plugin.internal.dispatcher/internal.xmap:96:59
at
org.apache.cocoon.template.script.DefaultScriptManager.resolveTemplate
(DefaultScriptManager.java:127)
at
org.apache.cocoon.template.script.DefaultScriptManager.resolveTemplate
(DefaultScriptManager.java:75)
at org.apache.cocoon.template.JXTemplateGenerator.setup
(JXTemplateGenerator.java:101)
at
org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.setupPi
peline(AbstractProcessingPipeline.java:341)
... 49 more
Caused by: org.apache.cocoon.ProcessingException: Error during
resolving of 'lm://resolve.structurer.lang-policy'.
at <map:serialize> - file:/usr/local/forrest/build/plugins/
org.apache.forrest.plugin.internal.dispatcher/internal.xmap:97:26
at <map:generate> - file:/usr/local/forrest/build/plugins/
org.apache.forrest.plugin.internal.dispatcher/internal.xmap:96:59
at org.apache.cocoon.components.source.SourceUtil.handle
(SourceUtil.java:397)
at org.apache.cocoon.generation.FileGenerator.setup
(FileGenerator.java:83)
at
org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.setupPi
peline(AbstractProcessingPipeline.java:341)
at
org.apache.cocoon.components.pipeline.impl.AbstractCachingProcessingPipe
line.setupPipeline(AbstractCachingProcessingPipeline.java:614)
at
org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.prepare
Pipeline(AbstractProcessingPipeline.java:459)
at
org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.prepare
Internal(AbstractProcessingPipeline.java:473)
at org.apache.cocoon.components.source.impl.SitemapSource.init
(SitemapSource.java:276)
at org.apache.cocoon.components.source.impl.SitemapSource.<init>
(SitemapSource.java:146)
at
org.apache.cocoon.components.source.impl.SitemapSourceFactory.getSource(
SitemapSourceFactory.java:65)
at
org.apache.cocoon.components.source.CocoonSourceResolver.resolveURI
(CocoonSourceResolver.java:159)
at
org.apache.cocoon.components.source.CocoonSourceResolver.resolveURI
(CocoonSourceResolver.java:189)
at
org.apache.cocoon.template.script.DefaultScriptManager.resolveTemplate
(DefaultScriptManager.java:84)
... 52 more
Caused by: org.apache.excalibur.source.SourceException: Could not
resolve locationmap location.
at
org.apache.forrest.locationmap.source.impl.LocationmapSourceFactory.getS
ource(LocationmapSourceFactory.java:75)
at
org.apache.cocoon.components.source.CocoonSourceResolver.resolveURI
(CocoonSourceResolver.java:159)
at
org.apache.cocoon.environment.internal.EnvironmentHelper.resolveURI
(EnvironmentHelper.java:134)
at
org.apache.cocoon.environment.internal.EnvironmentHelper.resolveURI
(EnvironmentHelper.java:144)
at org.apache.cocoon.generation.FileGenerator.setup
(FileGenerator.java:81)
... 62 more