cocoon-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Robby Pelssers" <robby.pelss...@ciber.com>
Subject RE: Problem with <i:include>
Date Tue, 08 Dec 2009 15:28:26 GMT
Anish,

 

Let's examine this more closely.

 

You specify a serializer of type 'xml'.  However... your xslt does not
contain a root tag when it matches "/".  So basically you should get an
invalid xml result.  So either the sample code you sent is wrong or your
xslt is no good.

 

Robby

 

From: Anish [mailto:anish.sneh@techblue.co.uk] 
Sent: Tuesday, December 08, 2009 3:27 PM
To: users@cocoon.apache.org
Subject: Re: Problem with <i:include>

 

	Can you elaborate your use case by attaching small xml snippets?
From
	what I understand you have some 
	Xml snippet containing an include tag.

Robby my pipeline and XSLT are like:
(Please correct if I 'm wrong)

My sitemap/pipeline:
<map:match pattern="root/sub/mypattern.html">
  <map:generate src="somefile.xml"/>
  <map:transform src="myxslt.xsl">
  <map:transform type="include">      
        <map:parameter name="recursive" value="false"/>
  </map:transform>
  <map:serialize type="xml"/>  
</map:match>
 
 
My XSLT (myxslt.xsl):
 
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
<http://www.w3.org/1999/XSL/Transform> 
  xmlns="http://www.w3.org/1999/xhtml" <http://www.w3.org/1999/xhtml> 
  xmlns:xhtml="http://www.w3.org/1999/xhtml"
<http://www.w3.org/1999/xhtml> 
  xmlns:i="http://apache.org/cocoon/include/1.0"
<http://apache.org/cocoon/include/1.0> 
> 
        <xsl:template match="/">
               Some test data
               <i:include src="cocoon://root/sub/mypattern.html"/>

        </xsl:template>
</xsl:stylesheet>
 
The output I want is:
 
###############
Some test data
Some test data
###############


String "Some test data" for two times. One is from XSLT (first  call)
and another one is from first include. I agree that I can use different
pipeline but I need to use it with:



<map:parameter name="recursive" value="false"/>

Please suggest.

TIA



Robby Pelssers wrote: 

By the way.. I think the design of your pipelines is bad after giving it
some more thought.
 
If you don't want recursive inclusion... you might consider configuring
a new pipeline which does not contain the <i:include> tag at all... you
could filter them out of the result by adding a filter.xslt instead of
rewriting them to another namespace.
 
And if you did want recursive inclusion... then you should add the
include transformer as last step in the 2nd pipeline.
 
<map:match pattern="root/sub/mypattern.html">
  <map:generate src="somefile.xml"/>
  <map:transform type="include"/>   --> by adding the include on
sub-level you prevent recursive inclusion
  <map:serialize type="xml"/>  
</map:match>
 
Cheers,
Robby
 
 
 
-----Original Message-----
From: Robby Pelssers [mailto:robby.pelssers@ciber.com] 
Sent: Tuesday, December 08, 2009 2:15 PM
To: users@cocoon.apache.org
Subject: RE: Problem with <i:include>
 
Can you elaborate your use case by attaching small xml snippets?  From
what I understand you have some 
Xml snippet containing an include tag.
 
 
<?xml version="1.0" encoding="UTF-8"?>
<main>
  <i:include src="cocoon://root/sub/mypattern.html"
xmlns:i="http://apache.org/cocoon/include/1.0"
<http://apache.org/cocoon/include/1.0> />  
</main>
 
 
And the result of calling pattern "root/sub/mypattern.html" results in
another snippet containing an include tag.
 
<?xml version="1.0" encoding="UTF-8"?>
<mypattern>
  <i:include src="cocoon://someOtherPipeline"
xmlns:i="http://apache.org/cocoon/include/1.0"
<http://apache.org/cocoon/include/1.0> />  
</mypattern>
 
 
So what you want is only first level inclusion so the result becomes:
 
<?xml version="1.0" encoding="UTF-8"?>
<main>
  <mypattern>
    <i:include src="cocoon://someOtherPipeline"
xmlns:i="http://apache.org/cocoon/include/1.0"
<http://apache.org/cocoon/include/1.0> />    --> this is the
problem since it's recursive
  </mypattern>
</main>
 
 
Now... if you were to add a extra transformation step to the pipeline
"root/sub/mypattern.html" which transforms the <i:include> into a
different namespace...you will be sure that the includeTransformer will
not run into recursion.
 
So the result would become for instance
<?xml version="1.0" encoding="UTF-8"?>
<main>
  <mypattern>
    <ignoreInclude:include src="cocoon://someOtherPipeline"
xmlns:ignoreInclude="http://apache.org/cocoon/ignoreInclude/1.0"
<http://apache.org/cocoon/ignoreInclude/1.0> />
  </mypattern>
</main>
 
Does that approach a solution to your problem?
 
Robby
 
-----Original Message-----
From: Anish [mailto:anish.sneh@techblue.co.uk] 
Sent: Tuesday, December 08, 2009 1:53 PM
To: users@cocoon.apache.org
Subject: Re: Problem with <i:include>
 
Robby Pelssers wrote:
  

	I actually do the same but not 1 one go... I split my
transformations
	    

in
  

	multiple sequential includes and that gives me no problem:
	 
	      <map:match pattern="datasheet_mockup">
	        <map:generate src="data/datasheet_mockup.xml"
label="step-1"/>
	    

 
  

	        <map:transform type="cinclude" label="step-2"/> <!--
Include
	<PackageID> -->
	        <map:transform
src="xslt/includePackageAndProductXml.xslt"
	label="step-3"/>
	        <map:transform type="cinclude" label="step-4"/>  <!--
Include
	actual Package and Product xml -->
	        <map:transform src="xslt/addGroupId.xslt" type="saxon"
	label="step-5"/>           
	        <map:transform src="xslt/createMapAndTopics.xslt"
type="saxon"
	label="step-6"/>    
	        <map:transform type="cinclude" label="step-7"/>  <!--
include
	BoxDimensions -->
	        <map:transform src="xslt/replaceBoxDimensions.xslt"
	    

type="saxon"
  

	label="step-8"/>
	        <map:transform src="xslt/cleanup.xslt" type="saxon"/>
	 
	        <map:serialize type="xml"/>              
	      </map:match>
	 
	Maybe this won't work for your usecase but it's worthwile
considering.
	 
	Robby 
	 
	-----Original Message-----
	From: Anish [mailto:anish.sneh@techblue.co.uk] 
	Sent: Tuesday, December 08, 2009 1:10 PM
	To: users@cocoon.apache.org
	Subject: Problem with <i:include>
	 
	Hi All
	 
	I'm trying to include content from a pipeline into an XSLT
using:
	 
	<i:include src="cocoon://root/sub/mypattern.html"
	xmlns:i="http://apache.org/cocoon/include/1.0"
<http://apache.org/cocoon/include/1.0> >
	 
	 
	while executing it gives:
	 
	java.lang.StackOverflowError
	  java.util.HashMap.get(HashMap.java:343)
	  
	 
	    

org.apache.cocoon.environment.AbstractEnvironment.getAttribute(AbstractE
  

	nvironment.java:444)
	  
	 
	    

org.apache.cocoon.environment.wrapper.EnvironmentWrapper.getAttribute(En
  

	vironmentWrapper.java:415)
	  
	 
	    

org.apache.cocoon.environment.wrapper.MutableEnvironmentFacade.getAttrib
  

	ute(MutableEnvironmentFacade.java:227)
	 
	There is a recursive call in the XSLT which again calls same
pipeline
	    

to
  

	include, to avoid that I have set (in the pipeline):
	 
	<map:parameter name="recursive" value="false"/>
	 
	 
	Still it's causing the stack to overflow. I'm using Cocoon
2.1.10 on 
	Tomcat 5.5.17.
	Please suggest.
	 
	  
	    

Thanks Robby,
 
Actually I was using "include" 
(org.apache.cocoon.transformation.IncludeTransformer) transformer. I'm 
not very much clear about the difference between "include" and 
"cinclude" (org.apache.cocoon.transformation.CIncludeTransformer).
 
Also I don't need recursive call. At the time of include I just want to 
include it once (the first level only).
 
 
Please suggest.
 
  






-- 
Anish Sneh
Software Engineer
Techblue Softwares Pvt. Ltd.
www.technologyblueprint.co.uk
 
 

Mime
View raw message