[ http://issues.apache.org/jira/browse/COCOON-1474?page=all ]
Ralph Goers updated COCOON-1474: -------------------------------- Bugzilla Id: (was: 34025) Component: * Cocoon Core (was: Blocks: (Undefined)) Description: I have reproduced this in both Cocoon 2.1.5 and 2.2.0-dev. If <i18n:text> tags are included in the initial file of a pipeline, the i18n transformer works great. But if they are added via an XSL transformation, the i18n transfomer no longer works. In this case, when the <i18n:text> tags are added via an XSL transform, the logs are recording unbalanced SAX events, and the end output is not well formed XML. I can reproduce this behavior with <i18n:text> and <i18n:translate> tags. Passing i18n attributes works fine. An example of the unbalanced SAX events are that when the i18nTransformer is processing the <i18n:text> elements, the SAX events look like this in the log: [startElement] uri=,local=i18n:text,raw=i18n:text [characters] MPT [endElement] uri=http://apache.org/cocoon/i18n/2.1,local=text,raw=i18n:text I'm not a SAX expert, but all the other SAX events in my log have the same thing for startElement and endElement. Further, when it outputs, it looks like this: <div><i18n:text>MPT</div> This is not well-formed XML. The i18nTransformer has removed the second <i18n:text> tag, but not the first, and of course it hasn't translated anything either. Here is a test case, so you can reproduce this: The pipelines: <!-- this one works fine --> <map:pipeline> <map:match pattern="simple.html"> <map:generate src="bugtest/simple.xml" label="record" /> <map:transform type="i18n"> <map:parameter name="locale" value="en"/> </map:transform> <map:serialize type="html"/> </map:match> </map:pipeline> <!-- This also works fine --> <map:pipeline> <map:match pattern="simple_with_xsl.html"> <map:generate src="bugtest/simple.xml" label="record" /> <map:transform type="xslt" src="bugtest/bugtest.xsl" label="basiccontent"/> <map:transform type="i18n"> <map:parameter name="locale" value="en"/> </map:transform> <map:serialize type="html"/> </map:match> </map:pipeline> <!-- This one works for the titletext, but not for the i18n text in the body. The <i18n:text> tags were included in simple2.xml for the titletext, but they were included in bugtest2.xsl for the body text --> <map:pipeline> <map:match pattern="simple_xsl_adds_i18n.html"> <map:generate src="bugtest/simple2.xml" label="record" /> <map:transform type="xslt" src="bugtest/bugtest2.xsl" label="basiccontent"/> <map:transform type="i18n"> <map:parameter name="locale" value="en"/> </map:transform> <map:serialize type="html"/> </map:match> </map:pipeline> Files: simple.xml: <?xml version="1.0" encoding="UTF-8"?> <html xmlns:i18n="http://apache.org/cocoon/i18n/2.1"> <head> <title> <i18n:text>titletext</i18n:text> </title> </head> <body> <div class="test"> <i18n:text>MPT</i18n:text> </div> </body> </html> simple2.xml <?xml version="1.0" encoding="UTF-8"?> <html xmlns:i18n="http://apache.org/cocoon/i18n/2.1"> <head> <title> <i18n:text>titletext</i18n:text> </title> </head> <body> <div class="test"> MPT </div> </body> </html> bugtest.xsl: <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:i18n="http://apache.org/cocoon/i18n/2.1" xmlns:dir="http://apache.org/cocoon/directory/2.0" exclude-result-prefixes="dir"> <xsl:output method='html' indent='yes'/> <!-- Match the root element --> <xsl:template match="/"> <html> <xsl:copy-of select="//head"/> <body> <xsl:copy-of select="/html/body/div"/> </body> </html> </xsl:template> <xsl:template match="node()|@*"> </xsl:template> <xsl:template match="/html/body/div"> <div> <xsl:value-of select="."/> </div> </xsl:template> </xsl:stylesheet> bugtest2.xsl: <?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:i18n="http://apache.org/cocoon/i18n/2.1" xmlns:dir="http://apache.org/cocoon/directory/2.0" exclude-result-prefixes="dir"> <xsl:output method='html' indent='yes'/> <!-- Match the root element --> <xsl:template match="/"> <html> <xsl:copy-of select="//head"/> <body> <xsl:apply-templates select="/html/body/div"/> </body> </html> </xsl:template> <xsl:template match="node()|@*"> </xsl:template> <xsl:template match="/html/body/div"> <div> <i18n:text> <xsl:value-of select="."/> </i18n:text> </div> </xsl:template> </xsl:stylesheet> Am I missing something? I can reproduce this in many places, but I've tried to boil it down to the simplest case I can. Thanks in advance for any advice! was: I have reproduced this in both Cocoon 2.1.5 and 2.2.0-dev. If <i18n:text> tags are included in the initial file of a pipeline, the i18n transformer works great. But if they are added via an XSL transformation, the i18n transfomer no longer works. In this case, when the <i18n:text> tags are added via an XSL transform, the logs are recording unbalanced SAX events, and the end output is not well formed XML. I can reproduce this behavior with <i18n:text> and <i18n:translate> tags. Passing i18n attributes works fine. An example of the unbalanced SAX events are that when the i18nTransformer is processing the <i18n:text> elements, the SAX events look like this in the log: [startElement] uri=,local=i18n:text,raw=i18n:text [characters] MPT [endElement] uri=http://apache.org/cocoon/i18n/2.1,local=text,raw=i18n:text I'm not a SAX expert, but all the other SAX events in my log have the same thing for startElement and endElement. Further, when it outputs, it looks like this: <div><i18n:text>MPT</div> This is not well-formed XML. The i18nTransformer has removed the second <i18n:text> tag, but not the first, and of course it hasn't translated anything either. Here is a test case, so you can reproduce this: The pipelines: <!-- this one works fine --> <map:pipeline> <map:match pattern="simple.html"> <map:generate src="bugtest/simple.xml" label="record" /> <map:transform type="i18n"> <map:parameter name="locale" value="en"/> </map:transform> <map:serialize type="html"/> </map:match> </map:pipeline> <!-- This also works fine --> <map:pipeline> <map:match pattern="simple_with_xsl.html"> <map:generate src="bugtest/simple.xml" label="record" /> <map:transform type="xslt" src="bugtest/bugtest.xsl" label="basiccontent"/> <map:transform type="i18n"> <map:parameter name="locale" value="en"/> </map:transform> <map:serialize type="html"/> </map:match> </map:pipeline> <!-- This one works for the titletext, but not for the i18n text in the body. The <i18n:text> tags were included in simple2.xml for the titletext, but they were included in bugtest2.xsl for the body text --> <map:pipeline> <map:match pattern="simple_xsl_adds_i18n.html"> <map:generate src="bugtest/simple2.xml" label="record" /> <map:transform type="xslt" src="bugtest/bugtest2.xsl" label="basiccontent"/> <map:transform type="i18n"> <map:parameter name="locale" value="en"/> </map:transform> <map:serialize type="html"/> </map:match> </map:pipeline> Files: simple.xml: <?xml version="1.0" encoding="UTF-8"?> <html xmlns:i18n="http://apache.org/cocoon/i18n/2.1"> <head> <title> <i18n:text>titletext</i18n:text> </title> </head> <body> <div class="test"> <i18n:text>MPT</i18n:text> </div> </body> </html> simple2.xml <?xml version="1.0" encoding="UTF-8"?> <html xmlns:i18n="http://apache.org/cocoon/i18n/2.1"> <head> <title> <i18n:text>titletext</i18n:text> </title> </head> <body> <div class="test"> MPT </div> </body> </html> bugtest.xsl: <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:i18n="http://apache.org/cocoon/i18n/2.1" xmlns:dir="http://apache.org/cocoon/directory/2.0" exclude-result-prefixes="dir"> <xsl:output method='html' indent='yes'/> <!-- Match the root element --> <xsl:template match="/"> <html> <xsl:copy-of select="//head"/> <body> <xsl:copy-of select="/html/body/div"/> </body> </html> </xsl:template> <xsl:template match="node()|@*"> </xsl:template> <xsl:template match="/html/body/div"> <div> <xsl:value-of select="."/> </div> </xsl:template> </xsl:stylesheet> bugtest2.xsl: <?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:i18n="http://apache.org/cocoon/i18n/2.1" xmlns:dir="http://apache.org/cocoon/directory/2.0" exclude-result-prefixes="dir"> <xsl:output method='html' indent='yes'/> <!-- Match the root element --> <xsl:template match="/"> <html> <xsl:copy-of select="//head"/> <body> <xsl:apply-templates select="/html/body/div"/> </body> </html> </xsl:template> <xsl:template match="node()|@*"> </xsl:template> <xsl:template match="/html/body/div"> <div> <i18n:text> <xsl:value-of select="."/> </i18n:text> </div> </xsl:template> </xsl:stylesheet> Am I missing something? I can reproduce this in many places, but I've tried to boil it down to the simplest case I can. Thanks in advance for any advice! > i18n transformer does not work when <i18n:text> tags are added via XSL > ---------------------------------------------------------------------- > > Key: COCOON-1474 > URL: http://issues.apache.org/jira/browse/COCOON-1474 > Project: Cocoon > Type: Bug > Components: * Cocoon Core > Versions: 2.2-dev (Current SVN) > Environment: Operating System: Mac OS X 10.3 > Platform: Macintosh > Reporter: Bess Sadler > Assignee: Cocoon Developers Team > > I have reproduced this in both Cocoon 2.1.5 and 2.2.0-dev. If <i18n:text> tags > are included in the initial file of a pipeline, the i18n transformer works > great. But if they are added via an XSL transformation, the i18n transfomer no > longer works. In this case, when the <i18n:text> tags are added via an XSL > transform, the logs are recording unbalanced SAX events, and the end output is > not well formed XML. I can reproduce this behavior with <i18n:text> and > <i18n:translate> tags. Passing i18n attributes works fine. > An example of the unbalanced SAX events are that when the i18nTransformer is > processing the <i18n:text> elements, the SAX events look like this in the log: > [startElement] uri=,local=i18n:text,raw=i18n:text > [characters] MPT > [endElement] uri=http://apache.org/cocoon/i18n/2.1,local=text,raw=i18n:text > I'm not a SAX expert, but all the other SAX events in my log have the same > thing > for startElement and endElement. Further, when it outputs, it looks like this: > <div><i18n:text>MPT</div> > This is not well-formed XML. The i18nTransformer has removed the second > <i18n:text> tag, but not the first, and of course it hasn't translated > anything > either. > Here is a test case, so you can reproduce this: > The pipelines: > <!-- this one works fine --> > <map:pipeline> > <map:match pattern="simple.html"> > <map:generate src="bugtest/simple.xml" label="record" /> > <map:transform type="i18n"> > <map:parameter name="locale" value="en"/> > </map:transform> > <map:serialize type="html"/> > </map:match> > </map:pipeline> > <!-- This also works fine --> > <map:pipeline> > <map:match pattern="simple_with_xsl.html"> > <map:generate src="bugtest/simple.xml" label="record" /> > <map:transform type="xslt" src="bugtest/bugtest.xsl" label="basiccontent"/> > <map:transform type="i18n"> > <map:parameter name="locale" value="en"/> > </map:transform> > <map:serialize type="html"/> > </map:match> > </map:pipeline> > <!-- This one works for the titletext, but not for the i18n text in the body. > The <i18n:text> tags were included in simple2.xml for the titletext, but they > were included in bugtest2.xsl for the body text --> > <map:pipeline> > <map:match pattern="simple_xsl_adds_i18n.html"> > <map:generate src="bugtest/simple2.xml" label="record" /> > <map:transform type="xslt" src="bugtest/bugtest2.xsl" label="basiccontent"/> > <map:transform type="i18n"> > <map:parameter name="locale" value="en"/> > </map:transform> > <map:serialize type="html"/> > </map:match> > </map:pipeline> > Files: > simple.xml: > <?xml version="1.0" encoding="UTF-8"?> > <html xmlns:i18n="http://apache.org/cocoon/i18n/2.1"> > <head> > <title> > <i18n:text>titletext</i18n:text> > </title> > </head> > <body> > <div class="test"> > <i18n:text>MPT</i18n:text> > </div> > </body> > </html> > simple2.xml > <?xml version="1.0" encoding="UTF-8"?> > <html xmlns:i18n="http://apache.org/cocoon/i18n/2.1"> > <head> > <title> > <i18n:text>titletext</i18n:text> > </title> > </head> > <body> > <div class="test"> > MPT > </div> > </body> > </html> > bugtest.xsl: > <?xml version="1.0"?> > <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > xmlns:i18n="http://apache.org/cocoon/i18n/2.1" > xmlns:dir="http://apache.org/cocoon/directory/2.0" > exclude-result-prefixes="dir"> > <xsl:output method='html' indent='yes'/> > <!-- Match the root element --> > <xsl:template match="/"> > <html> > <xsl:copy-of select="//head"/> > <body> > <xsl:copy-of select="/html/body/div"/> > </body> > </html> > </xsl:template> > <xsl:template match="node()|@*"> > </xsl:template> > <xsl:template match="/html/body/div"> > <div> > <xsl:value-of select="."/> > </div> > </xsl:template> > </xsl:stylesheet> > bugtest2.xsl: > <?xml version="1.0"?><xsl:stylesheet version="1.0" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > xmlns:i18n="http://apache.org/cocoon/i18n/2.1" > xmlns:dir="http://apache.org/cocoon/directory/2.0" > exclude-result-prefixes="dir"> > <xsl:output method='html' indent='yes'/> > <!-- Match the root element --> > <xsl:template match="/"> > <html> > <xsl:copy-of select="//head"/> > <body> > <xsl:apply-templates select="/html/body/div"/> > </body> > </html> > </xsl:template> > <xsl:template match="node()|@*"> > </xsl:template> > <xsl:template match="/html/body/div"> > <div> > <i18n:text> > <xsl:value-of select="."/> > </i18n:text> > </div> > </xsl:template> > </xsl:stylesheet> > Am I missing something? I can reproduce this in many places, but I've tried to > boil it down to the simplest case I can. Thanks in advance for any advice! -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira