Подтвердить что ты не робот

Инструмент сравнения XML/WSDL

Для тех, кто много работает с веб-сервисами, нет ничего удивительного, что они время от времени обновляются. И вам всегда нужно отслеживать изменения этих обновлений.

В моем конкретном случае я занимаюсь веб-сервисом, определенным WSDL, и я получаю классы, созданные на основе этого WSDL.

Но перед обновлением классов из обновленного WSDL я хотел бы посмотреть, что было изменено в WSDL и определить количество изменений - посмотреть, для чего я должен быть подготовлен.

К сожалению, если я сравниваю только файлы .wsdl новой и старой версии, он не всегда работает очень хорошо по одной причине - содержимое wsdl может быть переупорядочено (реорганизовано внутренне). Это причина поиска более семантического инструмента.

Я пробовал инструмент Oxygen XML Diff, но он также не работает для меня.

Я ищу инструмент, который возьмет два XML и принесет мне только семантические различия, например:

  • Добавлен элемент A
  • Добавлен подэлемент b7 в элемент B

Для этого, я думаю, инструмент должен загружать и глубоко анализировать структуру, Oxygen XML Diff требовал сделать это хорошо, но это просто улучшенная версия сравнения текстовых файлов.

Не могли бы вы порекомендовать работать для этого, в частности, просматривать обновления в веб-службах на основе WSDL.

ОБНОВЛЕНИЕ 1. Новая идея заключается в сравнении сгенерированных источников, а не с WSDL.

Спасибо.

4b9b3361

Ответ 1

http://membrane-soa.org имеет Java API для сравнения WSDL в своих SOA Model.

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/ предлагает инструмент онлайн-инструментария WSDL-компаратора который возвращает отчет о различиях между двумя WSDL. Отчет не является простым различием XML.

Ответ 2

Это может быть только частичное решение, но вы можете проанализировать старый и новый WSDL в SOAPui.

Вы должны иметь возможность сказать из сгенерированных методов и примеров запросов, что изменилось, будь то типы или методы.

надеюсь, что это поможет