HADOOP-17088.Failed to load XInclude files with relative path. (#2097)
Contributed by Yushi Hayasaka.
This commit is contained in:
parent
3e8b1e7426
commit
c8c1cc43d3
@ -40,6 +40,8 @@
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.JarURLConnection;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
import java.nio.file.Files;
|
||||
@ -3247,7 +3249,15 @@ private void handleInclude() throws XMLStreamException, IOException {
|
||||
File href = new File(confInclude);
|
||||
if (!href.isAbsolute()) {
|
||||
// Included resources are relative to the current resource
|
||||
File baseFile = new File(name).getParentFile();
|
||||
File baseFile;
|
||||
|
||||
try {
|
||||
baseFile = new File(new URI(name));
|
||||
} catch (IllegalArgumentException | URISyntaxException e) {
|
||||
baseFile = new File(name);
|
||||
}
|
||||
|
||||
baseFile = baseFile.getParentFile();
|
||||
href = new File(baseFile, href.getPath());
|
||||
}
|
||||
if (!href.exists()) {
|
||||
|
@ -1062,6 +1062,38 @@ public void testRelativeIncludes() throws Exception {
|
||||
new File(new File(relConfig).getParent()).delete();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRelativeIncludesWithLoadingViaUri() throws Exception {
|
||||
tearDown();
|
||||
File configFile = new File("./tmp/test-config.xml");
|
||||
File configFile2 = new File("./tmp/test-config2.xml");
|
||||
|
||||
new File(configFile.getParent()).mkdirs();
|
||||
out = new BufferedWriter(new FileWriter(configFile2));
|
||||
startConfig();
|
||||
appendProperty("a", "b");
|
||||
endConfig();
|
||||
|
||||
out = new BufferedWriter(new FileWriter(configFile));
|
||||
startConfig();
|
||||
// Add the relative path instead of the absolute one.
|
||||
startInclude(configFile2.getName());
|
||||
endInclude();
|
||||
appendProperty("c", "d");
|
||||
endConfig();
|
||||
|
||||
// verify that the includes file contains all properties
|
||||
Path fileResource = new Path(configFile.toURI());
|
||||
conf.addResource(fileResource);
|
||||
assertEquals("b", conf.get("a"));
|
||||
assertEquals("d", conf.get("c"));
|
||||
|
||||
// Cleanup
|
||||
configFile.delete();
|
||||
configFile2.delete();
|
||||
new File(configFile.getParent()).delete();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIntegerRanges() {
|
||||
Configuration conf = new Configuration();
|
||||
|
Loading…
Reference in New Issue
Block a user