为什么 apache hadoop 配置模块忽略了 CDATA?



我正在使用core-site.xml文件进行Hadoop操作,并使用org.apache.hadoop.conf.Configuration类加载它。

似乎常规转义字符串正在正确加载。但是,CDATA 语句显示为空白,根本没有解析。

core-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>cdata.example</name>
<value><![CDATA[Joe's <&> Bar]]></value>
</property>
<property>
<name>escaped.example</name>
<value>Joe&#39;s &lt;&amp;&gt; Bar</value>
</property>
</configuration>

Main.java

import org.apache.hadoop.conf.Configuration;
import java.net.MalformedURLException;
import java.io.File;
import java.net.URI;
public class Main {
public static void main(String[] args) {
Configuration conf = new Configuration();
File conffile = new File("core-site.xml");
try {
conf.addResource(conffile.toURI().toURL());
System.out.println(conf.get("cdata.example"));
System.out.println(conf.get("escaped.example"));
} catch(MalformedURLException e) {
System.out.println("MalformedURLException");
}
}
}

输出为:

乔的<&amp;>酒吧

为什么?根据 XML 标准,CDATA 不是正确的转义方案吗?

Hadoop 版本最高 2.8.x 可以正确解析 CDATA。在Hadoop 2.9及更高版本中,解析器从基于DOM的解析器DocumentBuilder(参见 https://issues.apache.org/jira/browse/HADOOP-14501(切换到基于stax的解析器FasterXML的woodstox(参见 https://issues.apache.org/jira/browse/HADOOP-14216 和 https://issues.apache.org/jira/browse/HADOOP-14501(,以提高xml解析性能。

已归档 https://issues.apache.org/jira/browse/HADOOP-16749,以便包括版本 2.9.3、3.1.4、3.2.2、3.3.0 及更高版本在内的行将再次正确解析 CDATA。

最新更新