You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用XMLUnit比较XML文件出现ClassCastException异常如何解决

报错原因

DetailedDiff.getAllDifferences() 方法返回的集合元素类型为org.custommonkey.xmlunit.Difference,你定义printDifferences方法时错误将入参声明为List<String>,遍历集合时尝试将Difference实例强转为String触发类转换异常。

修复方案
  1. 调整相关方法的泛型声明,明确集合存储的是Difference类型
  2. 遍历差异集合时,调用toString()方法获取差异的字符串描述,也可调用Difference类的专属方法获取更精细化的差异信息(比如差异节点位置、预期值、实际值等)
  3. 额外修正:Java字符串中反斜杠为转义符,文件路径中的单反斜杠需要改为双反斜杠,否则会触发编译错误。
修复后完整代码
package util;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.Reader;
import java.util.List;

import org.custommonkey.xmlunit.DetailedDiff;
import org.custommonkey.xmlunit.Diff;
import org.custommonkey.xmlunit.Difference;
import org.custommonkey.xmlunit.XMLUnit;
import org.xml.sax.SAXException;

/**
 * Java program to compare two XML files using XMLUnit example
 * @author Javin Paul
 */ 
public class XMLComparator { 
    public static void main(String args[]) throws FileNotFoundException, SAXException, IOException { 
        // 注意路径反斜杠转义
        FileInputStream fis1 = new FileInputStream("C:\\Users\\akshay_gawand\\Desktop\\8.3\\Transfer\\testcasemcs6.0");
        FileInputStream fis2 = new FileInputStream("C:\\Users\\akshay_gawand\\Desktop\\8.3\\Transfer\\testcasemcs7.0"); 
         
        BufferedReader source = new BufferedReader(new InputStreamReader(fis1));
        BufferedReader target = new BufferedReader(new InputStreamReader(fis2)); 
        // 配置XMLUnit忽略空格
        XMLUnit.setIgnoreWhitespace(true); 
        // 对比XML
        List<Difference> differences = compareXML(source, target); 
        // 打印差异
        printDifferences(differences); 
    } 

    // 明确返回泛型为Difference类型的集合
    public static List<Difference> compareXML(Reader source, Reader target) throws SAXException, IOException { 
        Diff xmlDiff = new Diff(source, target); 
        DetailedDiff detailXmlDiff = new DetailedDiff(xmlDiff); 
        return detailXmlDiff.getAllDifferences(); 
    } 

    // 调整入参类型为Difference集合
    public static void printDifferences(List<Difference> differences) { 
        int totalDifferences = differences.size();
        System.out.println("===============================");
        System.out.println("Total differences : " + totalDifferences); 
        System.out.println("===============================");

        for(Difference difference : differences) {
            // 调用toString方法打印差异信息
            System.out.println(difference); 
        } 
    } 
}

内容的提问来源于stack exchange,提问作者Akshay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 19:15:06