2011-11-09 39 views
12

Không có gì ngạc nhiên đối với những người làm việc với các dịch vụ web nhiều khi chúng được cập nhật theo thời gian. Và bạn luôn cần phải theo dõi các thay đổi của các bản cập nhật này.Công cụ so sánh XML/WSDL

Trong trường hợp cụ thể của tôi, tôi xử lý dịch vụ web được xác định bởi WSDL và tôi nhận các lớp được tạo dựa trên WSDL này.

Nhưng trước khi tái tạo các lớp từ WSDL cập nhật, tôi muốn xem những gì đã được thay đổi trong WSDL và xác định số lượng thay đổi - để xem tôi nên chuẩn bị những gì.

Thật không may, nếu tôi so sánh chỉ các tệp .wsdl của phiên bản mới và cũ, nó không phải lúc nào cũng hoạt động rất tốt vì một lý do - nội dung wsdl có thể được sắp xếp lại (được cấu trúc lại bên trong). Đó là lý do để tìm thêm công cụ ngữ nghĩa.

Tôi đã thử công cụ Oxygen XML Diff nhưng công cụ này cũng không hoạt động tốt cho tôi.

Tôi đang tìm kiếm một công cụ mà sẽ mất hai XMLs và mang cho tôi chỉ khác biệt về ngữ nghĩa, ví dụ:

  • tử Một thêm
  • Added subelement b7 đến yếu tố B

Đối với điều này để làm việc tôi đoán công cụ phải tải và phân tích sâu về cấu trúc, Ô nhiễm XML của Oxygen được yêu cầu làm tốt, nhưng nó chỉ là một phiên bản cải tiến so sánh các tập tin văn bản.

Bạn có thể khuyên bạn nên làm việc để làm điều đó, đặc biệt để xem các bản cập nhật trong các dịch vụ web dựa trên WSDL.

CẬP NHẬT 1: Ý tưởng mới là so sánh các nguồn được tạo thay vì WSDL.

Cảm ơn bạn.

Trả lời

13

http://membrane-soa.orgJava API for comparing WSDL trong SOA Model của họ.

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 + " "); 
    } 
    } 
} 

Sau khi thực hiện bạn sẽ có được kết quả thể hiện trong danh sách 2. Đó là một Danh sách sự khác nhau giữa hai tài liệu 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. 

Đối với một ví dụ về đầu ra từ các công cụ, http://www.service-repository.com/ cung cấp một online WSDL Comparator tool trả về một báo cáo về sự khác nhau giữa hai WSDL. Báo cáo không phải là một khác biệt XML đơn giản.

+1

Kể từ phiên bản 1.3 của Mô hình SOA, bạn có thể tạo báo cáo từ một công cụ dòng lệnh. Xem: http://www.membrane-soa.org/soa-model-doc/1.3/cmd-tool/wsdldiff-tool.htm Tôi muốn tiết lộ rằng tôi là thành viên của dự án Mô hình SOA . – baranco

+0

Điều này thật tuyệt, nhưng không giải quyết được toàn bộ vấn đề. Ví dụ, một yếu tố mới tác động đến yêu cầu và phản hồi nào? Điều này khó nói, và đây là một câu hỏi quan trọng. –

3

Đây chỉ có thể là giải pháp một phần nhưng bạn có thể phân tích WSDL cũ và mới trong SOAPui.

Bạn sẽ có thể nói từ các phương thức được tạo và các yêu cầu mẫu đã thay đổi cho dù đó là loại hoặc phương pháp.

hy vọng đó là một số sự giúp đỡ

+0

Tôi không thích SOAPui, giao diện của nó quá xấu và nó hoạt động quá tệ. Tôi đã có kinh nghiệm rất xấu với nó đặc biệt là trên nền tảng Mac. – Vladimir

+0

Bên cạnh đó ý tưởng của bạn là tốt. Tôi đã nghĩ rằng tôi có thể so sánh các nguồn của các lớp học được tạo ra mà có thể làm việc cho tôi mà không cần SOAPui. – Vladimir

Các vấn đề liên quan