Update of /cvsroot/sblim/jsr48-client/src/org/sblim/cimclient/internal/cimxml
In directory vz-cvs-3.sog:/tmp/cvs-serv18054/src/org/sblim/cimclient/internal/cimxml
Modified Files:
Tag: Experimental
CimXmlSerializer.java
Log Message:
3513357 - Handle multiple CDATAs in CimXmlSerializer
Index: CimXmlSerializer.java
===================================================================
RCS file: /cvsroot/sblim/jsr48-client/src/org/sblim/cimclient/internal/cimxml/CimXmlSerializer.java,v
retrieving revision 1.1.2.9
retrieving revision 1.1.2.10
diff -u -d -r1.1.2.9 -r1.1.2.10
--- CimXmlSerializer.java 23 Mar 2012 13:18:43 -0000 1.1.2.9
+++ CimXmlSerializer.java 1 Apr 2012 15:04:43 -0000 1.1.2.10
@@ -18,6 +18,7 @@
* 2524131 2009-01-21 raman_arora Upgrade client to JDK 1.5 (Phase 1)
* 2763216 2009-04-14 blaschke-oss Code cleanup: visible spelling/grammar errors
* 3510321 2012-03-23 blaschke-oss Handle CDATA in CimXmlSerializer
+ * 3513357 2012-04-01 blaschke-oss Handle multiple CDATAs in CimXmlSerializer
*/
package org.sblim.cimclient.internal.cimxml;
@@ -216,6 +217,10 @@
private boolean iLastClosed = false;
+ private final String CDATA_START = "<![CDATA[";
+
+ private final String CDATA_END = "]]>";
+
private CimXmlSerializer(boolean pPretty) {
this.iPretty = pPretty;
}
@@ -322,10 +327,34 @@
break;
case Node.TEXT_NODE:
String value = pNode.getNodeValue();
- if (value != null && value.startsWith("<![CDATA[") && value.endsWith("]]>")) {
- pWriter.write(value);
- } else {
- pWriter.writeValue(value);
+ if (value != null) {
+ int idx = 0;
+ int len = value.length();
+
+ while (idx < len) {
+ int cdata = value.indexOf(this.CDATA_START, idx);
+
+ // rest of string not CDATA, write all (escaped)
+ if (cdata == -1) {
+ pWriter.writeValue(value.substring(idx));
+ break;
+ }
+
+ // write characters before CDATA (escaped)
+ if (idx < cdata) {
+ pWriter.writeValue(value.substring(idx, cdata));
+ idx = cdata;
+ }
+
+ int end = value.indexOf(this.CDATA_END, idx);
+
+ // invalid CDATA
+ if (end == -1) { throw new IOException("CDATA section not closed: " + value); }
+
+ // write CDATA (not escaped)
+ pWriter.write(value.substring(idx, end + this.CDATA_END.length()));
+ idx = end + this.CDATA_END.length();
+ }
}
}
}
|