2011-11-09 74 views
12

对于那些使用网络服务的人来说,他们会不时更新,这并不奇怪。你总是需要跟踪这些更新的变化。XML/WSDL比较工具

在我的特殊情况下,我处理由WSDL定义的Web服务,并获得基于此WSDL生成的类。

但是在从更新后的WSDL中重新生成类之前,我想查看WSDL中发生了什么变化并确定了变化量 - 以了解我应该做些什么准备。

不幸的是,如果我只比较新版本和旧版本的.wsdl文件,并不总是工作得很好 - 出于某种原因 - wsdl内容可以重新排序(内部重构)。这就是找到更多语义工具的原因。

我试过了氧气XML Diff工具,但它不适合我。

我要寻找一个工具,它会采取两种XML,并带给我的只有语义差异,例如:

  • 元素加入A
  • 添加子元素B7到元素B

对于本工作我猜这个工具必须加载和深入分析结构,Oxygen XML Diff声称做得很好,但它只是文本文件比较的改进版本。

您能否为此推荐一个工作,尤其是要查看基于WSDL的Web服务更新。

UPDATE 1:新想法是比较生成的来源而不是WSDL。

谢谢。

回答

13

http://membrane-soa.org在其SOA Model一个Java API for comparing WSDL

package sample.wsdl; 

import java.util.List; 
import com.predic8.wsdl.*; 
import com.predic8.wsdl.diff.WsdlDiffGenerator; 
import com.predic8.soamodel.Difference; 

public class CompareWSDL { 

    public static void main(String[] args) { 
    compare(); 
    } 

    private static void compare(){ 
    WSDLParser parser = new WSDLParser(); 

    Definitions wsdl1 = parser.parse("resources/diff/1/article.wsdl"); 

    Definitions wsdl2 = parser.parse("resources/diff/2/article.wsdl"); 

    WsdlDiffGenerator diffGen = new WsdlDiffGenerator(wsdl1, wsdl2); 
    List<Difference> lst = diffGen.compare(); 
    for (Difference diff : lst) { 
     dumpDiff(diff, ""); 
    } 
    } 

    private static void dumpDiff(Difference diff, String level) { 
    System.out.println(level + diff.getDescription()); 
    for (Difference localDiff : diff.getDiffs()){ 
     dumpDiff(localDiff, level + " "); 
    } 
    } 
} 

执行你在清单2所示的输出后,是两个WSDL文档之间 差异列表。

Port ArticleServicePTPort removed. 
Port ArticleServicePTPort2 added. 
Operation create removed. 
Operation create2 added. 
Schema http://predic8.com/wsdl/material/ArticleService/1/ has changed: 
    Element createResponse has changed: 
    ComplexType has changed: 
     Sequence has changed: 
     Element NewElementForTest added. 

对于从工具的输出的一个例子,http://www.service-repository.com/提供online WSDL Comparator tool返回的两个WSDL之间的差别的报告。该报告不是简单的XML差异。

+1

从SOA模型1.3版开始,您可以从命令行工具生成报告。请参阅: http://www.membrane-soa.org/soa-model-doc/1.3/cmd-tool/wsdldiff-tool.htm 我想透露,我是SOA模型项目的成员。 – baranco

+0

这很酷,但并没有解决整个问题。例如,一个新元素会影响什么请求和响应?这很难说,这是一个重要的问题。 –

3

这可能只是一个部分解决方案,但您可以分析SOAPui中的旧的和新的WSDL。

您应该能够从生成的方法和示例请求中知道发生了什么变化,无论它是类型还是方法。

希望是一些帮助

+0

我不喜欢SOAPui,它的界面非常丑陋,而且效果太差。尤其在Mac平台上,我的体验非常糟糕。 – Vladimir

+0

除此之外,你的想法很好。我已经认为我可以比较生成的类的来源,即使没有SOAPui也可以为我工作。 – Vladimir