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.lang.ref.WeakReference;
|
||||||
import java.net.InetSocketAddress;
|
import java.net.InetSocketAddress;
|
||||||
import java.net.JarURLConnection;
|
import java.net.JarURLConnection;
|
||||||
|
import java.net.URI;
|
||||||
|
import java.net.URISyntaxException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.net.URLConnection;
|
import java.net.URLConnection;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
@ -3247,7 +3249,15 @@ private void handleInclude() throws XMLStreamException, IOException {
|
|||||||
File href = new File(confInclude);
|
File href = new File(confInclude);
|
||||||
if (!href.isAbsolute()) {
|
if (!href.isAbsolute()) {
|
||||||
// Included resources are relative to the current resource
|
// 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());
|
href = new File(baseFile, href.getPath());
|
||||||
}
|
}
|
||||||
if (!href.exists()) {
|
if (!href.exists()) {
|
||||||
|
@ -1062,6 +1062,38 @@ public void testRelativeIncludes() throws Exception {
|
|||||||
new File(new File(relConfig).getParent()).delete();
|
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
|
@Test
|
||||||
public void testIntegerRanges() {
|
public void testIntegerRanges() {
|
||||||
Configuration conf = new Configuration();
|
Configuration conf = new Configuration();
|
||||||
|
Loading…
Reference in New Issue
Block a user