You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shindig.apache.org by jo...@gmail.com on 2009/07/14 21:52:43 UTC
Support HTML serialization of CDATA sections
Reviewers: shindig.remailer_gmail.com,
Description:
An issue was discovered recently where message bundles with CDATA
content sections had their content dropped eg.
<msg name="foo"><![CDATA[ bar ]]></msg>
Root cause is that HTML serialization ignores serializing CDATA
sections. It's not clear to me why, so I'm proposing this trivial fix.
Please review this at http://codereview.appspot.com/91114
Affected files:
java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/DefaultHtmlSerializer.java
java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/MessageBundleTest.java
Index:
java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/DefaultHtmlSerializer.java
===================================================================
---
java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/DefaultHtmlSerializer.java
(revision 794025)
+++
java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/DefaultHtmlSerializer.java
(working copy)
@@ -58,9 +58,6 @@
throws IOException {
if (n == null) return;
switch (n.getNodeType()) {
- case Node.CDATA_SECTION_NODE: {
- break;
- }
case Node.COMMENT_NODE: {
writeComment(n, output);
break;
@@ -93,6 +90,7 @@
output.append("&").append(n.getNodeName()).append(";");
break;
}
+ case Node.CDATA_SECTION_NODE:
case Node.TEXT_NODE: {
writeText(n, output);
break;
Index:
java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/MessageBundleTest.java
===================================================================
---
java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/MessageBundleTest.java
(revision 794025)
+++
java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/MessageBundleTest.java
(working copy)
@@ -84,6 +84,16 @@
assertEquals(ImmutableMap.of("key", "value"), bundle.getMessages());
}
+ @Test
+ public void containsCdataSection() throws Exception {
+ String cdataXml =
+ "<messagebundle>" +
+ " <msg name='key'><![CDATA[<span id='foo'>data</span>]]></msg>" +
+ "</messagebundle>";
+ MessageBundle bundle = new MessageBundle(locale, cdataXml);
+ assertEquals(ImmutableMap.of("key", "<span id='foo'>data</span>"),
bundle.getMessages());
+ }
+
@Test(expected = SpecParserException.class)
public void missingNameThrows() throws SpecParserException {
String xml = "<messagebundle><msg>foo</msg></messagebundle>";
Re: Support HTML serialization of CDATA sections
Posted by John Hjelmstad <fa...@google.com>.
Disregard; serialization was clearly inappropriate here.
On Tue, Jul 14, 2009 at 12:52 PM, <jo...@gmail.com> wrote:
> Reviewers: shindig.remailer_gmail.com,
>
> Description:
> An issue was discovered recently where message bundles with CDATA
> content sections had their content dropped eg.
> <msg name="foo"><![CDATA[ bar ]]></msg>
>
> Root cause is that HTML serialization ignores serializing CDATA
> sections. It's not clear to me why, so I'm proposing this trivial fix.
>
> Please review this at http://codereview.appspot.com/91114
>
> Affected files:
>
> java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/DefaultHtmlSerializer.java
>
> java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/MessageBundleTest.java
>
>
> Index:
> java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/DefaultHtmlSerializer.java
> ===================================================================
> ---
> java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/DefaultHtmlSerializer.java
> (revision 794025)
> +++
> java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/DefaultHtmlSerializer.java
> (working copy)
> @@ -58,9 +58,6 @@
> throws IOException {
> if (n == null) return;
> switch (n.getNodeType()) {
> - case Node.CDATA_SECTION_NODE: {
> - break;
> - }
> case Node.COMMENT_NODE: {
> writeComment(n, output);
> break;
> @@ -93,6 +90,7 @@
> output.append("&").append(n.getNodeName()).append(";");
> break;
> }
> + case Node.CDATA_SECTION_NODE:
> case Node.TEXT_NODE: {
> writeText(n, output);
> break;
> Index:
> java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/MessageBundleTest.java
> ===================================================================
> ---
> java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/MessageBundleTest.java
> (revision 794025)
> +++
> java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/MessageBundleTest.java
> (working copy)
> @@ -84,6 +84,16 @@
> assertEquals(ImmutableMap.of("key", "value"), bundle.getMessages());
> }
>
> + @Test
> + public void containsCdataSection() throws Exception {
> + String cdataXml =
> + "<messagebundle>" +
> + " <msg name='key'><![CDATA[<span id='foo'>data</span>]]></msg>" +
> + "</messagebundle>";
> + MessageBundle bundle = new MessageBundle(locale, cdataXml);
> + assertEquals(ImmutableMap.of("key", "<span id='foo'>data</span>"),
> bundle.getMessages());
> + }
> +
> @Test(expected = SpecParserException.class)
> public void missingNameThrows() throws SpecParserException {
> String xml = "<messagebundle><msg>foo</msg></messagebundle>";
>
>
>