]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/process/SlcExecutionStep.java
Deal with special characters in logs
[gpl/argeo-slc.git] / runtime / org.argeo.slc.specs / src / main / java / org / argeo / slc / process / SlcExecutionStep.java
index 235b617e500f75cd6d95ae1265a86b4325eb1c68..f3319bbe635fe3c33818f44a06e49c13234df3c4 100644 (file)
@@ -87,7 +87,35 @@ public class SlcExecutionStep {
 \r
                StringTokenizer st = new StringTokenizer(log, "\n");\r
                while (st.hasMoreTokens())\r
-                       logLines.add(st.nextToken());\r
+                       logLines.add(removeNonXmlChars(st.nextToken()));\r
+       }\r
+\r
+       /**\r
+        * Removes non XML compliant characters (from\r
+        * http://stackoverflow.com/questions\r
+        * /20762/how-do-you-remove-invalid-hexadecimal\r
+        * -characters-from-an-xml-based-data-source-pr)\r
+        */\r
+       private static String removeNonXmlChars(String inString) {\r
+               if (inString == null)\r
+                       return null;\r
+\r
+               StringBuilder newString = new StringBuilder();\r
+               char ch;\r
+\r
+               for (int i = 0; i < inString.length(); i++) {\r
+\r
+                       ch = inString.charAt(i);\r
+                       // remove any characters outside the valid UTF-8 range as well as\r
+                       // all control characters\r
+                       // except tabs and new lines\r
+                       if ((ch < 0x00FD && ch > 0x001F) || ch == '\t' || ch == '\n'\r
+                                       || ch == '\r') {\r
+                               newString.append(ch);\r
+                       }\r
+               }\r
+               return newString.toString();\r
+\r
        }\r
 \r
        @Override\r