|  |  |  | License Codehaus OpenEJB OpenJMS OpenORB Tyrex

Old releases
General
Release 1.3
Release 1.3rc1
Release 1.2

Main
Home
About
Features
Download
Dependencies
Reference guide
Publications
JavaDoc
Maven 2 support
Maven 2 archetypes
DTD & Schemas
Recent HTML changes
News Archive
RSS news feed
Project Wiki

Development/Support
Mailing Lists
SVN/JIRA
Contributing
Support
Continuous builds
Prof. services

Related projects
Spring ORM support
Spring XML factories
WS frameworks

XML
XML

XML Code Generator
XML Code Generator

JDO
Introduction
First steps
Using JDO
JDO Config
Types
JDO Mapping
JDO FAQ
JDO Examples
JDO HOW-TOs
Tips & Tricks
Other Features
JDO sample JAR

Tools
Schema generator

Advanced JDO
Caching
OQL
Trans. & Locks
Design
KeyGen
Long Trans.
Nested Attrs.
Pooling Examples
LOBs
Best practice

DDL Generator
Using DDL Generator
Properties
Ant task
Type Mapping

More
The Examples
3rd Party Tools
JDO Tests
XML Tests
Configuration

About
License
User stories
Contributors
Marketplace
Status, Todo
Changelog
Library
Contact
Project Name

## Integrating Castor with other (open source) projects

Apache Cocoon
A scenario
Sitemap configuration
Component definition
Usage within a pipeline
Gotchas
References

## Apache Cocoon

Project home

Apache Cocoon is a web publishing framework built around the concepts of separation of concerns and component-based web development.

As part of this framework, Cocoon provides a component, the CastorTransformer, that marshalls an object hierarchy (for which a mapping file or a class descriptor hierarchy exists) to XML and inserts it as a stream of SAX events into a Cocoon pipeline.

Further information on the integration of Apche Cocoon and Castor can be found here.

### A scenario

Let's imagine the listed derivative department of an investment bank wants to display details of a derivative holding to the client. With the use of some 'magic', the information required to render this information is already stored in the (Http)Request object, where it is bound to an attribute with the name 'position'.

The following code fragment (stored in a separate XML file named position.xml)

      <root xmlns:castor="http://apache.org/cocoon/castor/1.0">
        <castor:marshall name="position" scope="request" />
      </root>

will instruct the CastorTransformer to look for an object (hierarchy) bound to a (Http)Request attribute with the name 'position', and marshall its current state to XML.

### Sitemap configuration

#### Component definition

As with all components in Cocoon, before the CastorTransformer can be used, it needs to be defined, i.e. its existence needs to be communicated to Cocoon. This is generally achieved by adding the relevant entries to the <component> section of the sitemap.

As with all transformers, the CastorTransformer definition needs to go into the <transformers></transformers> section as follows:

      <map:transformers>
        <map:transformer name="castor"
                         src="org.apache.cocoon.transformation.CastorTransformer">
          <mapping>castor/mapping.xml</mapping>
        </map:transformer>
      </map:transformers>

This definition registers the CastorTransformer with Cocoon under the logical name 'castor', which will be used in pipeline declarations to specify that this very transformer shall be used.

#### Usage within a pipeline

To use the CastorTransformer within a pipeline to insert the XML representation of an arbitrary object hierarchy into the pipeline, please specify a pipeline entry similar to the following pipeline definition:

      <map:pipeline>
        <map:match pattern="castor/show/position">
          <map:generate type="file" src="docs/position.xml" />
          <map:transform type="castor" />
          <map:serialize type="xml" />
        </map:match>
      </map:pipeline>

This instructs Cocoon to

1. read the content of the file 'docs/position.xml'
2. use the CastorTransformer to replace these instructions with the XML-ized state of the object found
3. send the result back to the client as a stream with content-type text/xml

#### Gotchas

-

With Cocoon being at release 2.1.5 at the moment of this writing, the CastorTransformer is still part of the scratchpad block. In order to be able to use the samples provided as part of this page, please make sure that you do not exclude the scratchpad block when building Cocoon. Please consult with the manuals for instructions about the Cocoon build process in general and blocks in particular.

-

At the time of this writing, the CastorTransformer internally seems to be relying on the use of SAX 1 API. This had the not well documented side-effect that the following property needs to be specified at the JVM level when trying to use the CastorTransformer:
TBD
When deploying Cocoon onto e.g. Tomcat 4.1.x, this is best done through the use of the JAVA_OPTS environment variable, which is used by Catalina to configure its hosting JVM.

### References

- | Project home
- | Javadocs (CastorTransformer)

<notice> Copyright © 1999-2005 ExoLab Group, Intalio Inc., and Contributors. All rights reserved. </notice>
<notice> Java, EJB, JDBC, JNDI, JTA, Sun, Sun Microsystems are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and in other countries. XML, XML Schema, XSLT and related standards are trademarks or registered trademarks of MIT, INRIA, Keio or others, and a product of the World Wide Web Consortium. All other product names mentioned herein are trademarks of their respective owners. </notice>