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

问题描述 投票:3回答:1

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

输出为:

null

Joe的酒吧

为什么?根据XML标准,CDATA是否不是适当的转义方案?

java hadoop configuration escaping cdata
1个回答
0
投票

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。

© www.soinside.com 2019 - 2024. All rights reserved.