This is really a follow up to some questions I asked earlier about XML
in request attributes. I wanted to show how I went about solving what
I needed, and to get feedback if there is a better way.
To recap, my basic problem was that I wanted to call internal
pipelines and pass them XML. The cocoon: protocol does not support
POST, so the easiest way I was told to use request attributes. I
decided to incorporate XMLBeans into the mix to make my life easier.
So, all of my business objects in the system are XMLBeans that have
been generated from a set of XMLSchema files. I have a series of
internal pipelines that can generate XML of these schemas. To "pass"
the objects around, I use a combination of flowscript and a generator
I wrote that generates XML from a request attribute that happens to be
an XMLObject. (Borrowing from the RequestAttributeGenerator)
So, here is a simple flow snippet:
var sessionInfo = getSessionInfo();
cocoon.request.setAttribute( "sessionInfo", sessionInfo );
cocoon.sendPage( "internal/style/catalog" );
So, the goal of the getSessionInfo call is to create a SessionInfo
object, which happens to be an XMLBeans object. Here is the
getSessionInfo method:
function getSessionInfo() {
var pipelineUtil = cocoon.createObject( PipelineUtil );
var xmlSaxHandler =
XmlBeans.getContextTypeLoader().newXmlSaxHandler(
SessionInfoDocument.type, null );
pipelineUtil.processToSAX(
"internal/sessionInfo/getSessionInfo",
null,
xmlSaxHandler.getContentHandler() );
var sessionInfo = xmlSaxHandler.getObject();
return sessionInfo;
}
Then, my generator for internal/style/catalog is such:
<map:generate type="xmlbeansAttribute">
<map:parameter name="attributeName" value="sessionInfo"/>
</map:generate>
This really seems to work great. Has anyone had experience with doing
this before? Does this seem like a good idea? Anything I am missing
here?
The main reason for choosing XMLBeans was the ability to go back and
forth from Java - XML easily. Boy, if this was merged with Hibernate,
that would be something!
I realize I could do this with straight Java objects and the
JXTemplateGenerator, but I really need everything in the Java object
to be turned into XML. XMLBeans seemed the easiest way to do this.
Thanks for any advice.
Irv