[ 
https://issues.apache.org/jira/browse/COCOON-2075?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Andrew Savory closed COCOON-2075.
---------------------------------

    Resolution: Fixed

Closed after discussion with Ellis. May need to be re-opened if others hit 
this...

> BrowserUpdateTransformer corrupts content from template using a default 
> namespace
> ---------------------------------------------------------------------------------
>
>                 Key: COCOON-2075
>                 URL: https://issues.apache.org/jira/browse/COCOON-2075
>             Project: Cocoon
>          Issue Type: Bug
>          Components: Blocks: Ajax
>    Affects Versions: 2.1.10, 2.1.11, 2.2
>            Reporter: Ellis Pritchard
>         Attachments: browser-update.xsl
>
>
> The org.apache.cocoon.ajax.BrowseUpdateTransformer does not pass on 
> startPrefixMapping()/endPrefixMapping() in an ajaxRequest when not in a 
> bu:replace; however this may mean that a namespace declared on an ancestor 
> element of a bu:replace never gets declared in the output despite its use 
> inside the bu:replace, and results in weird output behaviour after further 
> processing, e.g. missing element names.
> This problem seems to manifest itself only when using elements declared in 
> the default namespace, e.g. if I wrap the whole form in a div with a default 
> namespace declaration for xhtml:
> <div xmlns="http://www.w3.org/1999/xhtml/"; 
>     xmlns:ft="http://apache.org/cocoon/forms/1.0#template";
>     xmlns:fi="http://apache.org/cocoon/forms/1.0#instance";
>     xmlns:jx="http://apache.org/cocoon/templates/jx/1.0";>
>    <ft:form ...>
>        <div>
>            <span  class="x">
>                  <ft:widget ...>
> The div and span elements will not be output correctly after further 
> processing (empty element name) e.g.: 
> < >
>     < class="x">
> You need to insert at least an identity XSL transform after the 
> browser-update transformer to see this; a cocoon-view label doing a serialize 
> to XML on the transformer itself does not seem to be enough; presumably it is 
> the XSL processor that's going wrong when processing the corrupt output of 
> the transformer, not the browser-update transformer itself.
> The NamespacesTable used by the transformer declares the empty namespace 
> (prefix="",ns="") itself, so html markup with no-namespace declaration (as in 
> the forms-styling XSL) will work, but correct use an element in a default 
> namespace will not work.
> Adding default namespace declarations on the XHTML or the ft: elements 
> themselves does not work (not being passed through somehow: jx/jx-macro 
> problem?), however declaring a prefix for those elements does work, despite 
> the mappings not being declared, which I presume is some kind of XML-legacy 
> side-effect, outputting the effected tags with their prefix and local-name 
> intact, although this might still produce problems.
> In summary, elements declared in a default (uri but no-prefix) namespace are 
> mangled by the transformer/pipeline because the namespace prefix is not 
> declared. The lack of declaration may also be a general problem, depending on 
> how your template file is marked up. 
> The fix is to remove the conditional from the startPrefixMapping() and 
> endPrefixMapping() methods of BrowserUpdateTransformer, to allow all prefix 
> declarations to reach the NamespaceTable, and allow it to do the 
> optimization/de-duping work. I can't see that this could have any bad 
> effects, since the NamespaceTable/RedundantNamespacesFilter is designed to 
> handle all the namespace issues, which is why it is there in the first place.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to