使用XMLUnit比较XML文件出现ClassCastException异常如何解决
报错原因
DetailedDiff.getAllDifferences() 方法返回的集合元素类型为org.custommonkey.xmlunit.Difference,你定义printDifferences方法时错误将入参声明为List<String>,遍历集合时尝试将Difference实例强转为String触发类转换异常。
修复方案
- 调整相关方法的泛型声明,明确集合存储的是
Difference类型 - 遍历差异集合时,调用
toString()方法获取差异的字符串描述,也可调用Difference类的专属方法获取更精细化的差异信息(比如差异节点位置、预期值、实际值等) - 额外修正: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
相关产品推荐
相关产品推荐

