You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by vy...@apache.org on 2020/06/09 09:30:34 UTC
[logging-log4j2] branch master updated: #335 Fix reading of Windows
paths in Uris.
This is an automated email from the ASF dual-hosted git repository.
vy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
The following commit(s) were added to refs/heads/master by this push:
new 6debe00 #335 Fix reading of Windows paths in Uris.
6debe00 is described below
commit 6debe0038255db12c5438cea54075c845b7d5ae1
Author: Volkan Yazıcı <vo...@gmail.com>
AuthorDate: Tue Jun 9 11:30:11 2020 +0200
#335 Fix reading of Windows paths in Uris.
---
.../log4j/layout/json/template/util/Uris.java | 34 +++++++++++++++-------
.../log4j/layout/json/template/util/UrisTest.java | 3 +-
2 files changed, 25 insertions(+), 12 deletions(-)
diff --git a/log4j-layout-json-template/src/main/java/org/apache/logging/log4j/layout/json/template/util/Uris.java b/log4j-layout-json-template/src/main/java/org/apache/logging/log4j/layout/json/template/util/Uris.java
index 4c03843..65cd863 100644
--- a/log4j-layout-json-template/src/main/java/org/apache/logging/log4j/layout/json/template/util/Uris.java
+++ b/log4j-layout-json-template/src/main/java/org/apache/logging/log4j/layout/json/template/util/Uris.java
@@ -39,7 +39,7 @@ public enum Uris {;
private static final Logger LOGGER = StatusLogger.getLogger();
/**
- * Reads {@link URI}s of scheme <tt>classpath</tt> and <tt>file</tt>.
+ * Reads {@link URI} specs of scheme <tt>classpath</tt> and <tt>file</tt>.
*
* @param spec the {@link URI} spec, e.g., <tt>file:/holy/cow.txt</tt> or
* <tt>classpath:/holy/cat.txt</tt>
@@ -49,20 +49,34 @@ public enum Uris {;
Objects.requireNonNull(spec, "spec");
Objects.requireNonNull(charset, "charset");
try {
- return unsafeReadUri(spec, charset);
+ final URI uri = new URI(spec);
+ return unsafeReadUri(uri, charset);
} catch (final Exception error) {
- final String message = String.format(
- "failed reading URI (spec=%s, charset=%s)",
- spec, charset);
- throw new RuntimeException(message, error);
+ throw new RuntimeException("failed reading URI: " + spec, error);
+ }
+ }
+
+ /**
+ * Reads {@link URI}s of scheme <tt>classpath</tt> and <tt>file</tt>.
+ *
+ * @param uri the {@link URI}, e.g., <tt>file:/holy/cow.txt</tt> or
+ * <tt>classpath:/holy/cat.txt</tt>
+ * @param charset used {@link Charset} for decoding the file
+ */
+ public static String readUri(final URI uri, final Charset charset) {
+ Objects.requireNonNull(uri, "uri");
+ Objects.requireNonNull(charset, "charset");
+ try {
+ return unsafeReadUri(uri, charset);
+ } catch (final Exception error) {
+ throw new RuntimeException("failed reading URI: " + uri, error);
}
}
private static String unsafeReadUri(
- final String spec,
+ final URI uri,
final Charset charset)
throws Exception {
- final URI uri = new URI(spec);
final String uriScheme = uri.getScheme().toLowerCase();
switch (uriScheme) {
case "classpath":
@@ -70,11 +84,9 @@ public enum Uris {;
case "file":
return readFileUri(uri, charset);
default: {
- final String message = String.format("unknown URI scheme (spec=%s)", spec);
- throw new IllegalArgumentException(message);
+ throw new IllegalArgumentException("unknown scheme in URI: " + uri);
}
}
-
}
private static String readFileUri(
diff --git a/log4j-layout-json-template/src/test/java/org/apache/logging/log4j/layout/json/template/util/UrisTest.java b/log4j-layout-json-template/src/test/java/org/apache/logging/log4j/layout/json/template/util/UrisTest.java
index a70bbeb..05e679b 100644
--- a/log4j-layout-json-template/src/test/java/org/apache/logging/log4j/layout/json/template/util/UrisTest.java
+++ b/log4j-layout-json-template/src/test/java/org/apache/logging/log4j/layout/json/template/util/UrisTest.java
@@ -25,6 +25,7 @@ import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
+import java.net.URI;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
@@ -50,7 +51,7 @@ public class UrisTest {
try (final OutputStream outputStream = new FileOutputStream(file)) {
outputStream.write(nonAsciiUtfText.getBytes(StandardCharsets.UTF_8));
}
- final String uri = String.format("file:%s", file.getAbsoluteFile());
+ final URI uri = file.toURI();
final String content = Uris.readUri(uri, StandardCharsets.UTF_8);
Assert.assertEquals(nonAsciiUtfText, content);
} finally {