2011-11-09 52 views
12

Webサービスを頻繁に使用している人にとって、時々更新されることはありません。また、これらの更新プログラムの変更を常に追跡する必要があります。XML/WSDL比較ツール

私の場合、私はWSDLで定義されたWebサービスを扱い、このWSDLに基づいて生成されたクラスを取得します。

更新されたWSDLからクラスを再生成する前に、WSDLで何が変更されたかを確認し、変更の量を判断したいと思います。

残念ながら、新しいバージョンと古いバージョンの.wsdlファイルを比較すると、1つの理由で常にうまく機能するとは限りません。wsdlのコンテンツは並べ替えられます(内部的にリファクタリングされます)。それが意味論的ツールを見つける理由です。

Oxygen XML Diffツールを試しましたが、うまく機能しません。

私は例えば、2 XMLSを取り、私にだけ意味の違いをもたらすツールを探しています

  • 要素Aは、このための要素B

  • 追加のサブ要素B7を追加しました私はツールがロードして構造を深く分析しなければならないと推測します.Oxygen XML Diffはそれをうまくやっていると主張していましたが、テキストファイルの比較を改善しただけです。

    特に、WSDLに基づいたWebサービスの更新を確認するために、作業を進めることをお勧めしますか。

    UPDATE 1:新しいアイデアは、WSDLではなく生成されたソースを比較することです。

    ありがとうございます。

  • 答えて

    13

    http://membrane-soa.orgが自分SOA ModelJava 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に示すような出力を得る実行した後これは、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/は2つのWSDLの間の差異のレポートを返すonline WSDL Comparator toolを提供しています。このレポートは単純なXML差分ではありません。

    +1

    SOAモデルのバージョン1.3以降、コマンドライン・ツールからレポートを生成できます。参照してください: http://www.membrane-soa.org/soa-model-doc/1.3/cmd-tool/wsdldiff-tool.htm 私はSOA Modelプロジェクトのメンバーです。 – baranco

    +0

    これはクールですが、問題全体を解決するわけではありません。たとえば、新しい要素は要求と応答にどのような影響を与えますか?これは伝えるのが難しく、これは重要な質問です。 –

    3

    これは部分的な解決策に過ぎませんが、古いWSDLと新しいWSDLをSOAPuiで分析できます。

    生成されたメソッドや例から、型やメソッドの変更内容を知ることができます。

    +0

    私はSOAPuiが好きではありません。そのインターフェースはとても醜いですし、悪いです。特にMacプラットフォームでは非常に悪い経験をしています。 – Vladimir

    +0

    それ以外にもあなたの考えは良いです。私はすでにSOAPuiなしで私のために働くことができる生成されたクラスのソースを比較することができたと思っていました。 – Vladimir