mirror of
https://github.com/lightbend/config.git
synced 2025-01-29 05:30:08 +08:00
handle file: URLs the same as files; support including absolute filenames
This commit is contained in:
parent
9689abd781
commit
5cc18bdc03
@ -3,6 +3,10 @@
|
|||||||
*/
|
*/
|
||||||
package com.typesafe.config.impl;
|
package com.typesafe.config.impl;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.net.URISyntaxException;
|
||||||
|
import java.net.URL;
|
||||||
|
|
||||||
import com.typesafe.config.ConfigException;
|
import com.typesafe.config.ConfigException;
|
||||||
|
|
||||||
|
|
||||||
@ -130,4 +134,16 @@ final public class ConfigUtil {
|
|||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static File urlToFile(URL url) {
|
||||||
|
// this isn't really right, clearly, but not sure what to do.
|
||||||
|
try {
|
||||||
|
// this will properly handle hex escapes, etc.
|
||||||
|
return new File(url.toURI());
|
||||||
|
} catch (URISyntaxException e) {
|
||||||
|
// this handles some stuff like file:///c:/Whatever/
|
||||||
|
// apparently but mangles handling of hex escapes
|
||||||
|
return new File(url.getPath());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -338,7 +338,13 @@ public abstract class Parseable implements ConfigParseable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static Parseable newURL(URL input, ConfigParseOptions options) {
|
public static Parseable newURL(URL input, ConfigParseOptions options) {
|
||||||
return new ParseableURL(input, options);
|
// we want file: URLs and files to always behave the same, so switch
|
||||||
|
// to a file if it's a file: URL
|
||||||
|
if (input.getProtocol().equals("file")) {
|
||||||
|
return newFile(ConfigUtil.urlToFile(input), options);
|
||||||
|
} else {
|
||||||
|
return new ParseableURL(input, options);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private final static class ParseableFile extends Parseable {
|
private final static class ParseableFile extends Parseable {
|
||||||
@ -362,13 +368,18 @@ public abstract class Parseable implements ConfigParseable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
ConfigParseable relativeTo(String filename) {
|
ConfigParseable relativeTo(String filename) {
|
||||||
try {
|
File f = new File(filename);
|
||||||
URL url = relativeTo(input.toURI().toURL(), filename);
|
if (f.isAbsolute()) {
|
||||||
if (url == null)
|
return newFile(f, options().setOriginDescription(null));
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
URL url = relativeTo(input.toURI().toURL(), filename);
|
||||||
|
if (url == null)
|
||||||
|
return null;
|
||||||
|
return newURL(url, options().setOriginDescription(null));
|
||||||
|
} catch (MalformedURLException e) {
|
||||||
return null;
|
return null;
|
||||||
return newURL(url, options().setOriginDescription(null));
|
}
|
||||||
} catch (MalformedURLException e) {
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user