【问题标题】:How to canonicalize WSDL files in Java?如何在 Java 中规范化 WSDL 文件?
【发布时间】:2011-06-22 21:43:18
【问题描述】:

我需要找出两个 WSDL 文件的不同之处。我从漂亮地打印它们开始like here,但我看到在定义的两个文件中(无论出于何种愚蠢的原因)以不同的顺序有相同的东西(例如complexTypes)。我想进一步规范化文件,以便以后可以使用标准diff 之类的东西来查找差异。

不知道是否有为 WSDL 定义的规范形式,我知道有 Canonical XML,但我需要更进一步,对所有顺序无关紧要的东西进行排序。

【问题讨论】:

    标签: java xml wsdl canonicalization


    【解决方案1】:

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

    【讨论】:

    • 这还不够。在规范化 XML 时,您不能重新排序元素,因为元素顺序在 XML 中很重要。在 WSDL 中至少有一些地方的顺序是无关紧要的,例如,您可以交换两种类型的定义。我有需要比较的文件,它们因类型定义顺序而异(以及其他什么,我还不能确定)。
    【解决方案2】:

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

    【讨论】: