cocoon-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Anish <anish.s...@techblue.co.uk>
Subject Re: Problem with <i:include>
Date Tue, 08 Dec 2009 14:26:53 GMT
>
> 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"
  xmlns="http://www.w3.org/1999/xhtml"
  xmlns:xhtml="http://www.w3.org/1999/xhtml"
  xmlns:i="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"/>  
> </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"/>  
> </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"/>    --> 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"/>
>   </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">
>>
>>
>> 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