You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ta...@apache.org on 2018/11/26 10:25:24 UTC
[myfaces] branch 2.3.x updated: MYFACES-4266 optimized performance
This is an automated email from the ASF dual-hosted git repository.
tandraschko pushed a commit to branch 2.3.x
in repository https://gitbox.apache.org/repos/asf/myfaces.git
The following commit(s) were added to refs/heads/2.3.x by this push:
new 2472a69 MYFACES-4266 optimized performance
2472a69 is described below
commit 2472a6903f39cdf0e242166b320f7b6cfe4d31fe
Author: Thomas Andraschko <ta...@apache.org>
AuthorDate: Mon Nov 26 11:25:28 2018 +0100
MYFACES-4266 optimized performance
---
.../util/IllegalXmlCharacterFilterWriter.java | 49 ++++++++++++++++++----
1 file changed, 41 insertions(+), 8 deletions(-)
diff --git a/impl/src/main/java/org/apache/myfaces/util/IllegalXmlCharacterFilterWriter.java b/impl/src/main/java/org/apache/myfaces/util/IllegalXmlCharacterFilterWriter.java
index f7011e3..11f07bc 100644
--- a/impl/src/main/java/org/apache/myfaces/util/IllegalXmlCharacterFilterWriter.java
+++ b/impl/src/main/java/org/apache/myfaces/util/IllegalXmlCharacterFilterWriter.java
@@ -31,6 +31,8 @@ import java.io.Writer;
*/
public class IllegalXmlCharacterFilterWriter extends FilterWriter
{
+ private static final char[] EMPTY_CHAR_ARRAY = new char[0];
+
public IllegalXmlCharacterFilterWriter(Writer out)
{
super(out);
@@ -39,31 +41,62 @@ public class IllegalXmlCharacterFilterWriter extends FilterWriter
@Override
public void write(int c) throws IOException
{
- super.write(xmlEncode((char) c));
+ super.write(encodeChar((char) c));
}
@Override
public void write(char[] cbuf, int off, int len) throws IOException
{
- super.write(xmlEncode(cbuf), off, len);
+ super.write(encodeCharArray(cbuf, off, len), off, len);
}
@Override
public void write(String str, int off, int len) throws IOException
{
- super.write(new String(xmlEncode(str.toCharArray())), off, len);
+ super.write(encodeString(str, off, len), off, len);
}
- private char[] xmlEncode(char[] ca)
+ private static String encodeString(String str, int off, int len)
{
- for (int i = 0; i < ca.length; i++)
+ boolean containsInvalidChar = false;
+ char[] encodedCharArray = EMPTY_CHAR_ARRAY;
+
+ int to = off + len;
+ for (int i = off; i < to; i++)
{
- ca[i] = xmlEncode(ca[i]);
+ char charOld = str.charAt(i);
+ char charNew = encodeChar(charOld);
+
+ if (charNew != charOld)
+ {
+ if (!containsInvalidChar)
+ {
+ containsInvalidChar = true;
+ encodedCharArray = str.toCharArray();
+ }
+ encodedCharArray[i] = charNew;
+ }
}
- return ca;
+
+ if (containsInvalidChar)
+ {
+ return String.valueOf(encodedCharArray);
+ }
+
+ return str;
+ }
+
+ private static char[] encodeCharArray(char[] cbuf, int off, int len)
+ {
+ int to = off + len;
+ for (int i = off; i < to; i++)
+ {
+ cbuf[i] = encodeChar(cbuf[i]);
+ }
+ return cbuf;
}
- private char xmlEncode(char c)
+ private static char encodeChar(char c)
{
if (Character.isSurrogate(c))
{