1 31 32 package org.opencms.util; 33 34 import org.opencms.i18n.CmsEncoder; 35 import org.opencms.test.OpenCmsTestCase; 36 import org.opencms.xml.CmsXmlException; 37 import org.opencms.xml.CmsXmlUtils; 38 39 import java.io.StringWriter ; 40 41 import org.dom4j.Document; 42 import org.dom4j.DocumentHelper; 43 import org.dom4j.Element; 44 import org.dom4j.io.SAXWriter; 45 46 55 public class TestCmsXmlSaxWriter extends OpenCmsTestCase { 56 57 private static final String TEXT_1 = " This is a simple text "; 58 private static final String TEXT_2 = " This is a text with XML entities like <, > and & "; 59 private static final String TEXT_3 = " This is a text containing international chars like \u00e4\u00f6\u00fc\u00c4\u00d6\u00dc\u00df\u20ac "; 60 private static final String TEXT_3_ESC = " This is a text containing international chars like äöüÄÖÜ߀ "; 61 private static final String TEXT_4 = " This is a text with \u00e4\u00f6\u00fc\u00c4\u00d6\u00dc\u00df\u20ac as well as <> and & "; 62 private static final String TEXT_4_ESC = " This is a text with äöüÄÖÜ߀ as well as <> and & "; 63 64 69 public TestCmsXmlSaxWriter(String arg0) { 70 71 super(arg0); 72 } 73 74 79 public void testEntityExcapeInXml() throws Exception { 80 81 CmsXmlSaxWriter saxHandler = new CmsXmlSaxWriter(new StringWriter (4096), "US-ASCII"); 83 saxHandler.setEscapeXml(true); 84 saxHandler.setEscapeUnknownChars(true); 85 SAXWriter writer = new SAXWriter(saxHandler, saxHandler); 86 87 Document doc = docTestGenerate(); 89 90 writer.write(doc); 91 92 String result1 = saxHandler.getWriter().toString(); 93 System.out.println(result1); 94 95 assertTrue(result1.indexOf(TEXT_3_ESC) >= 0); 97 assertTrue(result1.indexOf(TEXT_4_ESC) >= 0); 98 99 Document doc1 = CmsXmlUtils.unmarshalHelper(result1, null); 101 102 docTestCheck(doc1); 104 } 105 106 111 public void testWithoutEntityEscaping() throws Exception { 112 113 CmsXmlSaxWriter saxHandler = new CmsXmlSaxWriter(new StringWriter (4096), "US-ASCII"); 115 saxHandler.setEscapeXml(false); 116 saxHandler.setEscapeUnknownChars(false); 117 SAXWriter writer = new SAXWriter(saxHandler, saxHandler); 118 119 Document doc = docTestGenerate(); 121 writer.write(doc); 122 String result1 = saxHandler.getWriter().toString(); 123 System.out.println(result1); 124 125 CmsXmlException error = null; 127 try { 128 CmsXmlUtils.unmarshalHelper(result1, null); 130 } catch (CmsXmlException e) { 131 error = e; 132 } 133 assertNotNull("Expected Exception was not thrown", error); 134 assertSame(org.opencms.xml.Messages.ERR_UNMARSHALLING_XML_DOC_0, error.getMessageContainer().getKey()); 135 } 136 137 142 public void testXmlRoundtrip() throws Exception { 143 144 CmsXmlSaxWriter saxHandler = new CmsXmlSaxWriter(new StringWriter (4096), CmsEncoder.ENCODING_ISO_8859_1); 146 saxHandler.setEscapeXml(true); 147 saxHandler.setEscapeUnknownChars(false); 148 SAXWriter writer = new SAXWriter(saxHandler, saxHandler); 149 150 Document doc = docTestGenerate(); 152 153 writer.write(doc); 155 156 String result1 = saxHandler.getWriter().toString(); 157 System.out.println(result1); 158 Document doc1 = CmsXmlUtils.unmarshalHelper(result1, null); 160 docTestCheck(doc1); 162 163 CmsXmlSaxWriter saxHandler2 = new CmsXmlSaxWriter(new StringWriter (4096), CmsEncoder.ENCODING_ISO_8859_1); 165 saxHandler.setEscapeXml(true); 166 saxHandler.setEscapeUnknownChars(false); 167 SAXWriter writer2 = new SAXWriter(saxHandler2, saxHandler2); 168 writer2.write(doc1); 170 String result2 = saxHandler2.getWriter().toString(); 171 System.out.println(result2); 172 Document doc2 = CmsXmlUtils.unmarshalHelper(result2, null); 173 174 assertEquals(result1, result2); 176 assertEquals(doc1, doc2); 177 docTestCheck(doc2); 179 } 180 181 186 private void docTestCheck(Document doc) { 187 188 assertEquals(TEXT_1, doc.getRootElement().element("texts").element("sub1").getText()); 189 assertEquals(TEXT_2, doc.getRootElement().element("texts").element("sub2").getText()); 190 assertEquals(TEXT_3, doc.getRootElement().element("texts").element("sub3").getText()); 191 assertEquals(TEXT_4, doc.getRootElement().element("texts").element("sub4").getText()); 192 assertEquals(TEXT_1, doc.getRootElement().element("cdatas").element("sub1").getText()); 193 assertEquals(TEXT_2, doc.getRootElement().element("cdatas").element("sub2").getText()); 194 assertEquals(TEXT_3, doc.getRootElement().element("cdatas").element("sub3").getText()); 195 assertEquals(TEXT_4, doc.getRootElement().element("cdatas").element("sub4").getText()); 196 } 197 198 203 private Document docTestGenerate() { 204 205 Document doc = DocumentHelper.createDocument(); 206 207 Element root = doc.addElement("testroot"); 208 Element texts = root.addElement("texts"); 209 texts.addElement("sub1").setText(TEXT_1); 210 texts.addElement("sub2").setText(TEXT_2); 211 texts.addElement("sub3").setText(TEXT_3); 212 texts.addElement("sub4").setText(TEXT_4); 213 Element cdatas = root.addElement("cdatas"); 214 cdatas.addElement("sub1").addCDATA(TEXT_1); 215 cdatas.addElement("sub2").addCDATA(TEXT_2); 216 cdatas.addElement("sub3").addCDATA(TEXT_3); 217 cdatas.addElement("sub4").addCDATA(TEXT_4); 218 219 return doc; 220 } 221 } | Popular Tags |