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 22:01:26 UTC
support CDATA in message bundle sections
Reviewers: shindig.remailer_gmail.com,
Description:
Patch attached.
Please review this at http://codereview.appspot.com/91115
Affected files:
java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/MessageBundle.java
java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/MessageBundleTest.java
Index:
java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/MessageBundle.java
===================================================================
---
java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/MessageBundle.java
(revision 794025)
+++
java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/MessageBundle.java
(working copy)
@@ -27,6 +27,7 @@
import org.json.JSONObject;
import org.w3c.dom.Element;
+import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import java.io.IOException;
@@ -164,7 +165,12 @@
NodeList msgChildren = msg.getChildNodes();
for (int child = 0; child < msgChildren.getLength(); ++child) {
try {
- htmlSerializer.serialize(msgChildren.item(child), sw);
+ if (msgChildren.item(child).getNodeType() ==
Node.CDATA_SECTION_NODE) {
+ // Workaround to treat CDATA as text.
+ sw.append(msgChildren.item(child).getTextContent());
+ } else {
+ htmlSerializer.serialize(msgChildren.item(child), sw);
+ }
} catch (IOException e) {
throw new SpecParserException("Unexpected error getting value of
msg node",
new XmlException(e));
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>";