Andrew McDonough

Please note: This page is imported from my wiki, which hasn't been updated in over 10 years. Some of the formatting was lost during the import. I'll try to get around to fixing it someday.


Cocoon is an [XML]] publishing framework developed on top of the [Avalon Server Framework.

Separation of Concerns - Making user people can interact and collaborate on a project without getting in each others way.

Installing Cocoon on Tomcat

  • Download the cocoon tar
  • Extract it
  • To build the war file run build war
  • The war file should be found in /cocoon/build/cocoon/build.war
  • Copy build.war to the tomcat webapps directory

Cocoon Forms (former Woody) framework

Copy from cocoon’s root directory to $CATALINA_HOME/conf/

  • sitemap.xmap - The sitemap file (usually located in $CATALINA_HOME/webapps/cocoon
  • cocoon.xconf -
  • cocoon.roles - mapping file - mappings for implementations to names - if the default implementation is to be overrides


<map:sitemap xmlns:map=””> <map:pipelines> <map:pipeline> <map:match pattern=“*.html”> <map:generate src=“{1}.xml”/>
<map:transform src=”.xsl”/> <map:serialize type=“html”/> </map:match> </map:pipeline> </map:pipelines> </map:sitemap>

The sitemap maps URI space to resources. It consist of components and pipelines. Pipelines are made out of components. All pipelines consist of at least two components; a generaor which produces the content and a serializer which delivers the content. A generator generates SAX events and a serializer turns these events into a byte stream. Each generator has a unique name and is mapped to a java class The logger attribute defines where messages produced by a component should go


Contains settings for all cocoon applications.

XSPs - eXtensivel Server Pages The Cocoon equivalent of a JSP - they contain both content and login and can import functionality via logicsheets cf. taglibs.

Synchronous and Asynchronous loading

  • When synchronous loading is used, the servlet waits until the new version of the page is generated.
  • When asynchronous loading is used new request use the old sitemap until compilation of the new one is complete.

The type of loading is found in cocoon.xconf under the reload-method property.

How to read the cache

<map:match pattern=”//”> <map:select type=“resource-exists”> <map:when test=“cache/{1}/{2}/index.html”> <map:read mime-type=“test/html” src=“cache/{1}/{2}/index.html”/> </map:when>
<map:otherwise> <map:call function=“navcontent”> <map:parameter name=“siteid” value=“{1}”/> <map:parameter name=“navid” value=“{2}”/> <map:parameter name=“contentid” value=“index”/>
</map:call> </map:otherwise> </map:select> </map:match>

JX Templates

We use|JEXL


Andrew McDonough

Andrew McDonough is a consultant CTO and software developer, currently based between Berlin and London.

Follow Andrew on Twitter or Connect on LinkedIn