Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么apache hadoop配置模块会忽略CDATA?_Java_Hadoop_Configuration_Escaping_Cdata - Fatal编程技术网

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

Java 为什么apache hadoop配置模块会忽略CDATA?,java,hadoop,configuration,escaping,cdata,Java,Hadoop,Configuration,Escaping,Cdata,我正在为hadoop操作使用core site.xml文件,并使用org.apache.hadoop.conf.Configuration类加载它 似乎正常的转义字符串正在正确加载。然而,CDATA语句是空的,根本没有被解析 core site.xml: <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configu

我正在为hadoop操作使用
core site.xml
文件,并使用
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>
输出为:

空的

乔酒吧


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

Hadoop版本2.8.x之前的版本正确解析CDATA。在Hadoop2.9及更高版本中,解析器从基于DOM的解析器DocumentBuilder(请参阅)转换为基于stax的解析器FasterXML的woodstox(请参阅和),以提高xml解析性能


字段,以便包括版本2.9.3、3.1.4、3.2.2、3.3.0和更高版本在内的行再次正确解析CDATA。

我怀疑代码检查的节点名等于
\text
,并且忘记检查
\CDATA部分。一个非常有趣的实验是将XML更改为
XXX
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");
        }
    }
}