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>";
>
>
>