cocoon-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From a...@gmx.net
Subject RE:RE: how to marshal objects within xsp
Date Wed, 10 Apr 2002 20:26:01 GMT

> > 1. Include Object as String:
> > 
> > 
> > <xsp:page
> >         language="java"
> >         xmlns:xsp="http://apache.org/xsp"
> >         xmlns:cinclude="http://apache.org/cocoon/include/1.0"
> >         xmlns:util="http://apache.org/xsp/util/2.0"
> > >
> >         <some-items anAttr="aVal">
> >             <util:include-expr>
> >
> <xsp:expr>model.getAnItemAsString()</xsp:expr>
> >                  </util:include-expr>
> >         </some-items>
> >     </some-items>
> > </xsp:page>
> > 
> > The page does not compile. The method .getAnItemAsString is not even
> > executed.
> 
> This will compile if you put everything on one line, no text nodes in
> the util:include-expr element:
> 
> <util:include-expr><xsp:expr>model.getAnItemAsString()</xsp:expr></util:
> include-expr>
> 
> Also, I would not recommend you this anyway because of re-parsing
> performance penalty.

As follows I include my original sources and the corresponding output:
(They slightly differ formally from the above mentioned example)


Table.xsp:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsp:page
        language="java"
        xmlns:xsp="http://apache.org/xsp"
        xmlns:cinclude="http://apache.org/cocoon/include/1.0"
        xmlns:util="http://apache.org/xsp/util/2.0"
>

<xsp:structure>
  <xsp:include>web.ModelManager</xsp:include>
</xsp:structure>


<simple-items edit="true" curSel="2">
    <xsp:logic>
   ModelManager mm = new
ModelManager();
<util:include-expr><util:expr>mm.marshal(mm.getSimpleItems())</util:expr></util:include-expr>
    </xsp:logic>
</simple-items>
</xsp:page>

resulting web-page:


org.apache.cocoon.ProcessingException: Language Exception:
org.apache.cocoon.components.language.LanguageException: Error compiling Table_xsp: Line 136,
column 111: ')' expected. Line 0, column 0: 1 error 


created Table_xsp.java:

  try {
        newParser = (org.apache.cocoon.components.parser.Parser)
                    this.manager.lookup(
                      org.apache.cocoon.components.parser.Parser.ROLE);
        InputSource __is = new InputSource(
                             new
StringReader(String.valueOf(this.characters("mm.marshal(mm.getSimpleItems())");)));


        XSPUtil.include(__is, this.contentHandler, newParser);
      } catch (Exception e) {
        getLogger().error("Could not include page", e);
      }
      finally { if (newParser != null)
                  this.manager.release((Component) newParser);
                } }
As you can see there is a ";" in between a java statement: '...s())");)));' 

Is there any other error in my page?

                
> > 2.
> > Use Castor's marshalling capabilities:
> > 
> > <some-items anAttr="aVal">
> >     <xsp:logic>
> >         model.marshal(this.contentHandler);
> >     </xsp:logic>
> > </some-items>
> 
> This sounds perfect.
> 
> 
> > Within the method I pass the contentHandler (wrapped into
> > DocumentHandlerAdapter) to castor's marshaller before I perfom
> mashal(obj).
> > 
> > As A result the cinclude transformer (which I need) complains about a
> > Nullpointer exception.
> 
> Make sure that model.marshal() does not call startDocument() and
> endDocument() on the contentHandler. If it does, you should strip these
> calls by wrapping contentHandler into the IncludeXMLConsumer.
> 
> This should work. Or we have a bug.

I include fragments of the original sources:

Table.xsp:
...
<simple-items edit="true" curSel="2">
    <xsp:logic>
   	ModelManager mm = new ModelManager();
   	mm.chmarshal(mm.getSimpleItems(), this.contentHandler);
    </xsp:logic>
</simple-items>
..

ModelManager.java:
...
 public void chmarshal (Collection col, org.xml.sax.ContentHandler
_docHandler){
    Marshaller marshaller =  marshaller = new Marshaller(new
org.apache.cocoon.xml.DocumentHandlerAdapter(_docHandler));
    Iterator it = col.iterator();
    while (it.hasNext()){
      Object obj = it.next();
      marshaller.marshal(obj);
    }
 }
...

I include two distinct possibilities to call the page once only processing
the xsp the other one including transformation with a stylesheet.


a) only processing the xsp

Sitemap entry:

 		<map:match pattern="ti" >
			<map:generate type="serverpages" src="Table.xsp"/>
			<map:transform type="cinclude"/>
			<map:serialize type="xml"/>
		</map:match>
		
Result in web browser:

<?xml version="1.0" encoding="UTF-8"?>
<simple-items edit="true" curSel="2" xmlns:xsp="http://apache.org/xsp"
xmlns:util="http://apache.org/xsp/util/2.0"
xmlns:cinclude="http://apache.org/cocoon/include/1.0">
<?xml version="1.0" encoding="UTF-8"?>
<simple-item weight="111"
id="1"><name>one</name><weight-msg/><id-msg/><name-msg/></simple-item>
<?xml version="1.0" encoding="UTF-8"?>
<simple-item weight="22"
id="2"><name>two</name><weight-msg/><id-msg/><name-msg/></simple-item>
<?xml version="1.0" encoding="UTF-8"?>
<simple-item weight="33"
id="3"><name>three</name><weight-msg/><id-msg/><name-msg/></simple-item>

Note that "<?xml version="1.0" encoding="UTF-8"?>" is inserted before each
marshalled object. If I include the output statically to an xml page my
Stylesheet complains about that and refuses transformation.

b)including transformation with a stylesheet

Site map entry:

  <map:match pattern="tbl.htm">
                  <map:generate type="serverpages" src="Table.xsp"/>
                  <map:transform type="cinclude"/>
                  <map:transform src="Table.xsl"/>
                  <map:serialize type="html"/>
  </map:match>
  
output from cocoon's logfile:
  
  ERROR   (2002-04-10) 22:04.38:129   [sitemap.generator.velocity] (/pcsb/)
HttpProcessor[8080][0]/VelocityGenerator: ResourceManager : unable to find
resource 'VM_global_library.vm' in any resource loader.
ERROR   (2002-04-10) 22:04.38:189   [sitemap.generator.velocity] (/pcsb/)
HttpProcessor[8080][0]/VelocityGenerator: ResourceManager : unable to find
resource 'VM_global_library.vm' in any resource loader.
ERROR   (2002-04-10) 22:04.38:239   [sitemap.generator.xmldb] (/pcsb/)
HttpProcessor[8080][0]/XMLDBGenerator: There was a problem setting up the
connection
ERROR   (2002-04-10) 22:04.38:239   [sitemap.generator.xmldb] (/pcsb/)
HttpProcessor[8080][0]/XMLDBGenerator: Make sure that your driver is available
ERROR   (2002-04-10) 22:04.38:249   [sitemap.generator.xmldb] (/pcsb/)
HttpProcessor[8080][0]/XMLDBGenerator: There was a problem setting up the
connection
ERROR   (2002-04-10) 22:04.38:249   [sitemap.generator.xmldb] (/pcsb/)
HttpProcessor[8080][0]/XMLDBGenerator: Make sure that your driver is available
ERROR   (2002-04-10) 22:04.38:270   [sitemap.generator.xmldbcollection]
(/pcsb/) HttpProcessor[8080][0]/XMLDBCollectionGenerator: There was a problem
setting up the connection
ERROR   (2002-04-10) 22:04.38:270   [sitemap.generator.xmldbcollection]
(/pcsb/) HttpProcessor[8080][0]/XMLDBCollectionGenerator: Make sure that your
driver is available
ERROR   (2002-04-10) 22:04.38:280   [sitemap.generator.xmldbcollection]
(/pcsb/) HttpProcessor[8080][0]/XMLDBCollectionGenerator: There was a problem
setting up the connection
ERROR   (2002-04-10) 22:04.38:280   [sitemap.generator.xmldbcollection]
(/pcsb/) HttpProcessor[8080][0]/XMLDBCollectionGenerator: Make sure that your
driver is available
FATAL_E (2002-04-10) 22:05.26:960   [core.xslt-processor]
(/pcsb/table/tbl.htm) HttpProcessor[8080][0]/TraxErrorHandler: Error in TraxTransformer:
javax.xml.transform.TransformerException: java.lang.NullPointerException
javax.xml.transform.TransformerException: java.lang.NullPointerException
	at
org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1230)
	at
org.apache.xalan.transformer.TransformerImpl.run(TransformerImpl.java:3139)
	at java.lang.Thread.run(Thread.java:484)

Note: without cinclude there is no exception. Unfortunately I need cinclude
for a more complex dynamic stylesheet.

In both cases (with or without cinclude) the stylestheed doesn't process any
of the marshalled items.

Any ideas?

Harald

-- 
GMX - Die Kommunikationsplattform im Internet.
http://www.gmx.net


---------------------------------------------------------------------
Please check that your question has not already been answered in the
FAQ before posting. <http://xml.apache.org/cocoon/faqs.html>

To unsubscribe, e-mail: <cocoon-users-unsubscribe@xml.apache.org>
For additional commands, e-mail: <cocoon-users-help@xml.apache.org>


Mime
View raw message