On Sat, 12 Feb 2005 14:52:57 +0100, Daniel Fagerstrom
<[EMAIL PROTECTED]> wrote:
> Irv Salisbury wrote:
> > 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?
>
> Seem like a reasonable approach. You can simplify things a little bit by
> embeding the XMLBean in an object that implements
> org.apache.excalibur.xml.sax.XMLizable,
> http://svn.apache.org/viewcvs.cgi/excalibur/trunk/components/xmlutil/src/java/org/apache/excalibur/xml/sax/XMLizable.java?view=markup
> The toSAX method could be implemented in terms of the XMLObject.save method.
>
> Both JXTG and the XModuleSource
> http://wiki.apache.org/cocoon/XModuleSource are XMlizable aware, so you
> don't need any specialized generator.
>
> Also, if you are using trunk, it might be interesting to know that Rhino
> 1.6, (that is used for flowscripts) has extensive XMLBean support:
> http://marc.theaimsgroup.com/?t=110009028500003&r=1&w=2.
>
> > 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!
>
> They are at least discussing it: http://wiki.apache.org/xmlbeans/V2Features.
>
> /Daniel
>
This is why I ask this list! Thanks for the info. Great references.
You know, if only some of this could be put into book form...
Irv