You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cocoon.apache.org by bu...@apache.org on 2004/02/27 19:19:42 UTC

DO NOT REPLY [Bug 27301] New: - FilterTransformer: Generates not matching block tags

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=27301>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=27301

FilterTransformer: Generates not matching block tags

           Summary: FilterTransformer: Generates not matching block tags
           Product: Cocoon 2
           Version: 2.1.4
          Platform: PC
        OS/Version: All
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: sitemap components
        AssignedTo: dev@cocoon.apache.org
        ReportedBy: apache@dobler.net


example: 
sitemap:   <map:match pattern="filter/*">
              <map:generate src="test.xml"
              <map:transform type="filter">
                 <map:parameter name="element-name" value="include"/>
                 <map:parameter name="count" value="10"/>
                 <map:parameter name="blocknr" value="1"/>                   
              </map:transform> 
              <map:serialize type="xml"/>                
           </map:match>

test.xml:
<?xml version="1.0" encoding="UTF-8"?>
<files xmlns:i="http://apache.org/cocoon/include/1.0">
  <i:include src="file1.xml" />
  <i:include src="file2.xml" />
  <i:include src="file3.xml" />
  <i:include src="file4.xml" />
</files>

output:
<?xml version="1.0" encoding="UTF-8"?>
<files>
  <i:block id="1" xmlns:i="http://apache.org/cocoon/include/1.0">
    <i:include src="file1.xml" />
    <i:include src="file2.xml" />
    <i:include src="file3.xml" />
    <i:include src="file4.xml" />
  </block>
</files>

I tracked the cause to:
org.apache.cocoon.transformation.FilterTransformer 1.3 Line 186-200
    public void endElement(String uri,String name,String raw)
    throws SAXException  {
        if (this.foundIt && name.equals(this.parentName)) {
            // FIXME: VG: This will fail on XML like:
            // <parent>
            //   <element>
            //     <parent>
            super.contentHandler.endElement(uri, BLOCK, BLOCK);
            super.contentHandler.endElement(uri, name, raw);
            this.foundIt = false;
            this.skip = false;
        } else if (!this.skip)  {
            super.contentHandler.endElement(uri,name,raw);
        }
    }

in line 193:
            super.contentHandler.endElement(uri, BLOCK, BLOCK);
the uri variable has the namespace of the parent element (in this case from
<files>) and not from the <i:include> element, so the end </block> tag is
written	without the namespace prefix i

suggestion: use no namespace for the block tag or a namespace of his own