如何在Java中规范化WSDL文件?

我需要找到两个WSDL文件的差异。 我开始像这里一样漂亮地打印它们,但是我看到在不同顺序中定义的两个文件(出于任何愚蠢的原因)中有相同的东西(例如complexType s)。 我想进一步规范化文件,以后我可以使用标准diff类的东西来找到差异。

不知道是否有一个定义的WSDL规范forms,我知道有Canonical XML ,但我需要更进一步,排序所有顺序无关紧要的事情。

您可以从http://www.jclark.com/xml/下载Java程序,该程序将XML转换为Canonical XML。 这也适用于WSDL文件。

我以递归方式遍历树,并对匹配schema|wsdl:binding|wsdl:portType|wsdl:types|wsdl:definitions的节点的所有子节点进行了排序。 我用这个答案来打印输出。 无论出于何种原因format.setLineWidth(65); 不起作用,所以我不得不使用replaceAll("\\s*\n\\s*(?=[^\\s<])", " ") 。 它似乎工作正常。