BVAL-159 drop commons dependencies
diff --git a/bval-jsr/pom.xml b/bval-jsr/pom.xml
index b94b02d..d810e0d 100644
--- a/bval-jsr/pom.xml
+++ b/bval-jsr/pom.xml
@@ -151,11 +151,6 @@
<dependencies>
<dependency>
- <groupId>commons-beanutils</groupId>
- <artifactId>commons-beanutils-core</artifactId>
- <optional>true</optional>
- </dependency>
- <dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-weaver-privilizer-api</artifactId>
</dependency>
@@ -195,7 +190,7 @@
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-interceptor_1.2_spec</artifactId>
- <version>1.0-alpha-1</version>
+ <version>1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
@@ -204,10 +199,6 @@
<version>1.0</version>
<scope>provided</scope>
</dependency>
- <dependency>
- <groupId>com.oracle</groupId>
- <artifactId>javafx</artifactId>
- </dependency>
<!-- Testing dependencies -->
<dependency>
diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/util/PathNavigation.java b/bval-jsr/src/main/java/org/apache/bval/jsr/util/PathNavigation.java
index 06d486c..6a6497a 100644
--- a/bval-jsr/src/main/java/org/apache/bval/jsr/util/PathNavigation.java
+++ b/bval-jsr/src/main/java/org/apache/bval/jsr/util/PathNavigation.java
@@ -16,11 +16,7 @@
*/
package org.apache.bval.jsr.util;
-import javax.validation.ValidationException;
-
-import org.apache.bval.util.Exceptions;
-import org.apache.bval.util.Validate;
-import org.apache.commons.lang3.StringEscapeUtils;
+import static org.apache.bval.util.Escapes.unescapeJava;
import java.io.IOException;
import java.io.StringWriter;
@@ -29,7 +25,11 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-import java.util.logging.Logger;
+
+import javax.validation.ValidationException;
+
+import org.apache.bval.util.Exceptions;
+import org.apache.bval.util.Validate;
/**
* Defines a path navigation algorithm and a means of interacting with same.
@@ -142,18 +142,10 @@
}
protected void handleNextChar(CharSequence path, PathPosition pos, Writer target) throws IOException {
- target.write(Character.toChars(Character.codePointAt(path, pos.getIndex())));
- pos.next();
- }
- }
-
- private static class FullQuotedStringParser extends QuotedStringParser {
-
- @Override
- protected void handleNextChar(CharSequence path, PathPosition pos, Writer target) throws IOException {
- final int codePoints = StringEscapeUtils.UNESCAPE_JAVA.translate(path, pos.getIndex(), target);
+ final int codePoints = unescapeJava(path, pos.getIndex(), target);
if (codePoints == 0) {
- super.handleNextChar(path, pos, target);
+ target.write(Character.toChars(Character.codePointAt(path, pos.getIndex())));
+ pos.next();
} else {
for (int i = 0; i < codePoints; i++) {
pos.plus(Character.charCount(Character.codePointAt(path, pos.getIndex())));
@@ -162,20 +154,7 @@
}
}
- private static final Logger LOG = Logger.getLogger(PathNavigation.class.getName());
-
- private static final QuotedStringParser QUOTED_STRING_PARSER;
-
- static {
- QuotedStringParser quotedStringParser;
- try {
- quotedStringParser = new FullQuotedStringParser();
- } catch (Exception e) {
- LOG.warning("Apache commons-lang3 is not on the classpath; Java escaping in quotes will not be available.");
- quotedStringParser = new QuotedStringParser();
- }
- QUOTED_STRING_PARSER = quotedStringParser;
- }
+ private static final QuotedStringParser QUOTED_STRING_PARSER = new QuotedStringParser();
/**
* Create a new PathNavigation instance.
@@ -262,8 +241,7 @@
/**
* Handles an index/key. If the text contained between [] is surrounded by a pair of " or ', it will be treated as a
- * string which may contain Java escape sequences. This function is only available if commons-lang3 is available on
- * the classpath!
+ * string which may contain Java escape sequences.
*
* @param path
* @param pos
diff --git a/bval-jsr/src/main/java/org/apache/bval/util/Escapes.java b/bval-jsr/src/main/java/org/apache/bval/util/Escapes.java
new file mode 100644
index 0000000..10ea1b2
--- /dev/null
+++ b/bval-jsr/src/main/java/org/apache/bval/util/Escapes.java
@@ -0,0 +1,203 @@
+/**
+ * Copyright (C) 2006-2018 Talend Inc. - www.talend.com
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.bval.util;
+
+import java.io.IOException;
+import java.io.Writer;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+// taken from commons-lang3
+public final class Escapes {
+ private static final CharSequenceTranslator UNESCAPE_JAVA =
+ new AggregateTranslator(
+ new OctalUnescaper(), // .between('\1', '\377'),
+ new UnicodeUnescaper(),
+ new LookupTranslator(new String[][] {
+ {"\\b", "\b"},
+ {"\\n", "\n"},
+ {"\\t", "\t"},
+ {"\\f", "\f"},
+ {"\\r", "\r"}
+ }),
+ new LookupTranslator(
+ new String[][] {
+ {"\\\\", "\\"},
+ {"\\\"", "\""},
+ {"\\'", "'"},
+ {"\\", ""}
+ })
+ );
+
+ private Escapes() {
+ // no-op
+ }
+
+ public static int unescapeJava(final CharSequence from, final int offset, final Writer output) {
+ // return StringEscapeUtils.UNESCAPE_JAVA.translate(path, pos.getIndex(), target);
+ return UNESCAPE_JAVA.translate(from, offset, output);
+ }
+
+ protected interface CharSequenceTranslator {
+ int translate(CharSequence input, int index, Writer out);
+ }
+
+ private static class AggregateTranslator implements CharSequenceTranslator {
+ private final CharSequenceTranslator[] translators;
+
+ private AggregateTranslator(final CharSequenceTranslator... translators) {
+ this.translators = translators;
+ }
+
+ @Override
+ public int translate(final CharSequence input, final int index, final Writer out) {
+ for (final CharSequenceTranslator translator : translators) {
+ final int consumed = translator.translate(input, index, out);
+ if(consumed != 0) {
+ return consumed;
+ }
+ }
+ return 0;
+ }
+ }
+
+ private static class OctalUnescaper implements CharSequenceTranslator {
+ @Override
+ public int translate(final CharSequence input, final int index, final Writer out) {
+ final int remaining = input.length() - index - 1;
+ final StringBuilder builder = new StringBuilder();
+ if (input.charAt(index) == '\\' && remaining > 0 && isOctalDigit(input.charAt(index + 1))) {
+ final int next = index + 1;
+ final int next2 = index + 2;
+ final int next3 = index + 3;
+
+ builder.append(input.charAt(next));
+
+ if (remaining > 1 && isOctalDigit(input.charAt(next2))) {
+ builder.append(input.charAt(next2));
+ if (remaining > 2 && isZeroToThree(input.charAt(next)) && isOctalDigit(input.charAt(next3))) {
+ builder.append(input.charAt(next3));
+ }
+ }
+
+ try {
+ out.write(Integer.parseInt(builder.toString(), 8));
+ } catch (IOException e) {
+ throw new IllegalStateException(e);
+ }
+ return 1 + builder.length();
+ }
+ return 0;
+ }
+
+ private boolean isOctalDigit(final char ch) {
+ return ch >= '0' && ch <= '7';
+ }
+
+ private boolean isZeroToThree(final char ch) {
+ return ch >= '0' && ch <= '3';
+ }
+ }
+
+ public static class UnicodeUnescaper implements CharSequenceTranslator {
+ @Override
+ public int translate(final CharSequence input, final int index, final Writer out) {
+ if (input.charAt(index) == '\\' && index + 1 < input.length() && input.charAt(index + 1) == 'u') {
+ int i = 2;
+ while (index + i < input.length() && input.charAt(index + i) == 'u') {
+ i++;
+ }
+
+ if (index + i < input.length() && input.charAt(index + i) == '+') {
+ i++;
+ }
+
+ if (index + i + 4 <= input.length()) {
+ // Get 4 hex digits
+ final CharSequence unicode = input.subSequence(index + i, index + i + 4);
+
+ try {
+ final int value = Integer.parseInt(unicode.toString(), 16);
+ out.write((char) value);
+ } catch (final NumberFormatException nfe) {
+ throw new IllegalArgumentException("Unable to parse unicode value: " + unicode, nfe);
+ } catch (final IOException e) {
+ throw new IllegalStateException(e);
+ }
+ return i + 4;
+ }
+ throw new IllegalArgumentException("Less than 4 hex digits in unicode value: '" + input.subSequence(index, input.length())
+ + "' due to end of CharSequence");
+ }
+ return 0;
+ }
+ }
+
+ public static class LookupTranslator implements CharSequenceTranslator {
+ private final Map<String, String> lookupMap;
+ private final Set<Character> prefixSet;
+ private final int shortest;
+ private final int longest;
+
+ private LookupTranslator(final String[][] lookup) {
+ lookupMap = new HashMap<>();
+ prefixSet = new HashSet<>();
+ int _shortest = Integer.MAX_VALUE;
+ int _longest = 0;
+ if (lookup != null) {
+ for (final CharSequence[] seq : lookup) {
+ this.lookupMap.put(seq[0].toString(), seq[1].toString());
+ this.prefixSet.add(seq[0].charAt(0));
+ final int sz = seq[0].length();
+ if (sz < _shortest) {
+ _shortest = sz;
+ }
+ if (sz > _longest) {
+ _longest = sz;
+ }
+ }
+ }
+ shortest = _shortest;
+ longest = _longest;
+ }
+
+ @Override
+ public int translate(final CharSequence input, final int index, final Writer out) {
+ if (prefixSet.contains(input.charAt(index))) {
+ int max = longest;
+ if (index + longest > input.length()) {
+ max = input.length() - index;
+ }
+ for (int i = max; i >= shortest; i--) {
+ final CharSequence subSeq = input.subSequence(index, index + i);
+ final String result = lookupMap.get(subSeq.toString());
+
+ if (result != null) {
+ try {
+ out.write(result);
+ } catch (final IOException e) {
+ throw new IllegalStateException(e);
+ }
+ return i;
+ }
+ }
+ }
+ return 0;
+ }
+ }
+}
diff --git a/bval-jsr/src/test/java/org/apache/bval/jsr/xml/Demo.java b/bval-jsr/src/test/java/org/apache/bval/jsr/xml/Demo.java
index 2552a3d..793fa5f 100644
--- a/bval-jsr/src/test/java/org/apache/bval/jsr/xml/Demo.java
+++ b/bval-jsr/src/test/java/org/apache/bval/jsr/xml/Demo.java
@@ -23,7 +23,6 @@
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
-import org.apache.commons.lang3.builder.ToStringBuilder;
import org.junit.Test;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
@@ -51,6 +50,6 @@
InputSource xml = new InputSource(getClass().getResourceAsStream("/sample-validation2.xml"));
xr.parse(xml);
JAXBElement<ValidationConfigType> result = (JAXBElement<ValidationConfigType>) unmarshallerHandler.getResult();
- System.out.println(ToStringBuilder.reflectionToString(result.getValue()));
+ System.out.println(result.getValue());
}
}
diff --git a/pom.xml b/pom.xml
index 8b2545a..1fe732b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -324,11 +324,6 @@
<optional>true</optional>
</dependency>
<dependency>
- <groupId>commons-beanutils</groupId>
- <artifactId>commons-beanutils-core</artifactId>
- <version>1.8.3</version>
- </dependency>
- <dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-weaver-privilizer-api</artifactId>
<version>${commons.weaver.version}</version>
@@ -364,16 +359,9 @@
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-el-api</artifactId>
- <version>9.0.5</version>
+ <version>9.0.12</version>
<scope>provided</scope>
</dependency>
- <dependency>
- <groupId>com.oracle</groupId>
- <artifactId>javafx</artifactId>
- <version>8.0</version>
- <systemPath>${java.home}/lib/ext/jfxrt.jar</systemPath>
- <scope>system</scope>
- </dependency>
</dependencies>
</dependencyManagement>