【问题标题】:Why is apache hadoop configuration module ignores CDATA?为什么 apache hadoop 配置模块忽略 CDATA?
【发布时间】:2020-01-09 17:54:41
【问题描述】:

我正在使用 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");
        }
    }
}

输出是:

乔的酒吧

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

【问题讨论】:

  • 我怀疑代码检查 nodeName 等于 #text 并且忘记检查 #cdata-section。一个非常有趣的实验是将 XML 更改为 &lt;value&gt;XXX &lt;![CDATA[Joe's &lt;&amp;&gt; Bar]]&gt; YYY&lt;/value&gt;。如果您收到XXX YYY,那么是时候针对 Hadoop 提交错误了。

标签: java hadoop configuration escaping cdata


【解决方案1】:

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-14216https://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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    • 2015-05-28
    • 1970-01-01
    • 2012-02-03
    • 2012-06-26
    相关资源
    最近更新 更多