You are viewing a plain text version of this content. The canonical link for it is here.
Posted to soap-dev@ws.apache.org by du...@locus.apache.org on 2000/08/17 21:10:59 UTC
cvs commit: xml-soap/java/src/org/apache/soap Utils.java
duftler 00/08/17 12:10:59
Modified: java/src/org/apache/soap Utils.java
Log:
Changed cleanString(...) to handle CDATA sections correctly.
Thanks to Ross Milward (ross.milward@db.com) for pointing out this bug.
Revision Changes Path
1.3 +49 -13 xml-soap/java/src/org/apache/soap/Utils.java
Index: Utils.java
===================================================================
RCS file: /home/cvs/xml-soap/java/src/org/apache/soap/Utils.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- Utils.java 2000/05/30 10:23:52 1.2
+++ Utils.java 2000/08/17 19:10:58 1.3
@@ -78,23 +78,59 @@
StringBuffer strBuf = new StringBuffer();
char[] chars = orig.toCharArray();
+ boolean inCDATA = false;
for (int i = 0; i < chars.length; i++)
{
- switch (chars[i])
+ if (!inCDATA)
{
- case '&' : strBuf.append("&");
- break;
- case '\"' : strBuf.append(""");
- break;
- case '\'' : strBuf.append("'");
- break;
- case '<' : strBuf.append("<");
- break;
- case '>' : strBuf.append(">");
- break;
- default : strBuf.append(chars[i]);
- break;
+ switch (chars[i])
+ {
+ case '&' : strBuf.append("&");
+ break;
+ case '\"' : strBuf.append(""");
+ break;
+ case '\'' : strBuf.append("'");
+ break;
+ case '<' :
+ {
+ if (chars.length >= i + 9)
+ {
+ String tempStr = new String(chars, i, 9);
+
+ if (tempStr.equals("<![CDATA["))
+ {
+ strBuf.append(tempStr);
+ i += 8;
+ inCDATA = true;
+ }
+ else
+ {
+ strBuf.append("<");
+ }
+ }
+ else
+ {
+ strBuf.append("<");
+ }
+ }
+ break;
+ case '>' : strBuf.append(">");
+ break;
+ default : strBuf.append(chars[i]);
+ break;
+ }
+ }
+ else
+ {
+ strBuf.append(chars[i]);
+
+ if (chars[i] == '>'
+ && chars[i - 1] == ']'
+ && chars[i - 2] == ']')
+ {
+ inCDATA = false;
+ }
}
}