You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cocoon.apache.org by Leszek Gawron <lg...@apache.org> on 2005/04/12 11:13:30 UTC

[jxtg] imports and namespaces

It seems there is a bug that affects jxtg scripts that use jx:import

-- 
Leszek Gawron                                                 MobileBox
lgawron@apache.org                              http://www.mobilebox.pl

Re: [jxtg] imports and namespaces

Posted by Leszek Gawron <lg...@mobilebox.pl>.
Leszek Gawron wrote:
> It seems there is a bug that affects jxtg scripts that use jx:import
sh** I thought I cancelled that. Should go to drafts.

Never mind. You can reproduce the bug like this:

> <?xml version="1.0" encoding="UTF-8"?>
> <map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0">
>   <map:views>
>     <map:view from-label="content" name="content">
>       <map:serialize type="html"/>
>     </map:view>
>     <map:view from-label="content" name="pretty">
>       <map:transform src="../stylesheets/system/xml2html.xslt"/>
>       <map:serialize type="html"/>
>     </map:view>
>   </map:views>
>  <map:pipelines>
>   <map:pipeline>
>     <map:match pattern="bugtest">
>       <map:generate src="test.jx" type="jx" label="content"/>
>       <map:serialize type="xml"/>
>     </map:match>
>   </map:pipeline>
>  </map:pipelines>
> </map:sitemap>

> <?xml version="1.0" encoding="UTF-8"?>
> <page xmlns:i18n="http://apache.org/cocoon/i18n/2.1" xmlns:jx="http://apache.org/cocoon/templates/jx/1.0">
>     <jx:import uri="resource://org/apache/cocoon/forms/generation/jx-macros.xml"/> 
>     <head>
>         <title>cocoon</title>
>     </head>
> </page>

now issuing http://localhost:8080/jxtest/bugtest?cocoon-view=pretty you get:
> <page xmlns:i18n="http://apache.org/cocoon/i18n/2.1" xmlns:jx="http://apache.org/cocoon/templates/jx/1.0">
>   <head xmlns:%@$#^@#="%@$#^@#">
>    <title>cocoon</title>
>   </head>
> </page>

I think I know what the problem is but have no idea how to fix it:

1. jx:import "inserts" all tags from imported source instead of the tag 
itself

2. jx:template does nothing at all. This tag does not produce any 
content. It was introduced as a root tag for jx files with macro 
definitions so importing a macro definition file does not produce any 
output at all.

3. The content of jx-macros.xml is:
<jx:template xmlns:jx="http://apache.org/cocoon/templates/jx/1.0"
              xmlns:fi="http://apache.org/cocoon/forms/1.0#instance">
  <jx:macro name="blah"/>
</jx:template>

4. The chain of SAX events for these scripts will be (whitespace filtered)

startPrefixMapping( i18n )
startPrefixMapping( jx )
startElement( page )

#jx-macros sax events
startPrefixMapping( jx )
startPrefixMapping( fi )

#no element to bind these namespaces to!!!

endPrefixMapping( fi )
endPrefixMapping( jx )
#eof jx-macros sax events

startElement( head )
startElement( title )

.. and so on

I am pretty sure that this problem is caused by the fact that there is 
no element to bind new namespaces to because:

a) if you put ANY element into jx-macros.xml file the namespaces are 
bound to that element and the final output is OK
b) if you define the "fi" namespace at main template level there is also 
no problem at all.


I do not know XML specs well. Would it fix (break :)) things if we 
delayed endPrefixMapping till the end of main script?

PS. official thanks to oceatoon for nailing down the use case that 
broke. I had this once but for a quite complicated template and was not 
able to reproduce it under simpler conditions

-- 
Leszek Gawron                                      lgawron@mobilebox.pl
IT Manager                                         MobileBox sp. z o.o.
+48 (61) 855 06 67                              http://www.mobilebox.pl
mobile: +48 (501) 720 812                       fax: +48 (61) 853 29 65