2011-11-09 26 views
12

No sorprende que quienes trabajan con servicios web se actualicen de vez en cuando. Y siempre necesita realizar un seguimiento de los cambios de estas actualizaciones.Herramienta de comparación de XML/WSDL

En mi caso particular, trato con el servicio web definido por WSDL y obtengo las clases generadas en base a este WSDL.

Pero antes de la regeneración de clases de WSDL actualizado, me gustaría ver qué se cambió en WSDL y determinar la cantidad de cambios, para ver para qué debería estar preparado.

Desafortunadamente, si comparo solo archivos .wsdl de versiones nueva y anterior, no siempre funciona muy bien por una razón: los contenidos wsdl se pueden reordenar (refactorizar internamente). Esa es la razón para encontrar más herramienta semántica.

He intentado con la herramienta Oxygen XML Diff pero tampoco funciona bien para mí.

Busco una herramienta que tendrá dos XMLs y tráeme únicas diferencias semánticas, por ejemplo:

  • Elemento Un añadió
  • Agregado subelemento b7 a elemento B

Por esta para trabajar Supongo que la herramienta debe cargar y analizar profundamente la estructura, Oxygen XML Diff tenía la pretensión de hacerlo bien, pero es solo una versión mejorada de la comparación de archivos de texto.

¿Podría recomendar un trabajo para eso, en particular para ver las actualizaciones en los servicios web basados ​​en WSDL.

ACTUALIZACIÓN 1: New Idea consiste en comparar fuentes generadas en vez de WSDL.

Gracias.

Respuesta

13

http://membrane-soa.org tiene una Java API for comparing WSDL en su 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 + " "); 
    } 
    } 
} 

Después de ejecutar a obtener el resultado que se muestra en el listado 2. Se trata de una lista de diferencias entre los dos documentos 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. 

Para un ejemplo de la salida de la herramienta, http://www.service-repository.com/ ofrece una online WSDL Comparator tool que devuelve un informe de las diferencias entre dos WSDL. El informe no es una simple diferencia XML.

+1

Desde la versión 1.3 de SOA Model, puede generar el informe desde una herramienta de línea de comandos. Ver: http://www.membrane-soa.org/soa-model-doc/1.3/cmd-tool/wsdldiff-tool.htm Quiero revelar que soy un miembro del proyecto del modelo SOA . – baranco

+0

Esto es genial, pero no resuelve todo el problema. Por ejemplo, un nuevo elemento afecta qué solicitudes y respuestas? Esto es difícil de decir, y esta es una pregunta importante. –

3

Esto puede ser solo una solución parcial, pero podría analizar el WSDL anterior y el nuevo en SOAPui.

Debería poder decir a partir de los métodos generados y las solicitudes de ejemplo qué ha cambiado si se trata de tipos o métodos.

esperanza de que es un poco de ayuda

+0

No me gusta SOAPui, su interfaz es muy fea y funciona muy mal. He tenido muy mala experiencia con él, especialmente en la plataforma Mac. – Vladimir

+0

Además, tu idea es buena. Ya pensé que podría comparar las fuentes de clases generadas que podrían funcionar para mí sin siquiera SOAPui. – Vladimir

Cuestiones relacionadas