2009-03-20 11 views
18

Pliki WSDL często importują inne schematy WSDL i XML.Proste narzędzie do pobierania wszystkich zaimportowanych/dołączonych plików WSDL i schematów

Czy podano adres URL pliku WSDL, czy istnieje narzędzie do pobierania WSDL i wszystkich innych odwołań do WSDL i schematów?

Idealnie byłoby, gdyby to narzędzie było przyjazne w języku Java lub Perl.

+0

Szukam więcej interfejsu API lub narzędzia wiersza poleceń, które jest bezpłatne; Nie tyle szukam propozycji aplikacji. – zzztimbo

Odpowiedz

13

SoapUI ma widza treści WSDL, jak strona internetowa opisuje

Interfejs przeglądarka umożliwia stosunkowo łatwą nawigację i kontrolę całego kontraktu dla importowanego pliku WSDL, łącznie ze wszystkimi importowanych i włączonych WSDL i XSD plików i ich zawartych typów definicje itp

http://www.soapui.org/userguide/interfaces/interfaceeditor.html

+12

SoapUI ma również możliwość eksportu pliku WSDL do pliku lokalnego. Kliknij projekt prawym przyciskiem myszy i wybierz "Definicja eksportu". –

1

narzędzie Altova SchemaAgent mogą pobrać, wizualizacji i modelowania WSDL i wiele schematów. To bardzo miłe, gdy sprawy stają się skomplikowane.

2

Poniższy skrypt Perl zrobi to, co chcesz:

#!/usr/bin/perl 
# 


use strict; 
use warnings; 

use LWP::Simple; 


sub downloadfile { 
     my ($url, $file) = @_; 
     getstore($url, $file); 
} 

sub getLinesMatching { 
     my ($file, $pattern) = @_; 
     open my $fh,'<',$file or die "Could not open $file: $!"; 
     my @matching = grep /schemaLocation/,<$fh>; 
     my $size = @matching; 
     close $fh; 
     @matching; 
} 

sub processFile { 
     my ($url, $file) = @_; 

     downloadfile $url, $file; 

     my @lines = getLinesMatching $file,'schemaLocation'; 
     if (@lines > 0) { 
       foreach my $line (@lines) { 
         $line =~ /schemaLocation=\"([^\"]*)/; 
         my ($url2) = $1; 
         print "$url2\n\n"; 
         $url2 =~ /.*\/([^\/]*)/; 
         my ($file2) = $1; 
         print "$file2\n\n"; 
         processFile ($url2, $file2); 
       } 
     } 
} 


my ($url) = @ARGV; 
$url =~ /.*\/([^\/]*)/; 
my ($base) = $1; 
$base =~ s/\?/./; 

print "Processing [$base] for [$url]\n\n"; 

processFile $url, $base; 

Podsumowując, trwa przekazany w parametrze jako adres URL, aby pobrać jako pierwszego pliku. Następnie skanuje ten plik pod kątem atrybutów schemaLocation i pobiera każdy z tych plików w sposób rekursywny, dopóki nie zostaną znalezione wszystkie schematy lub nie można ich znaleźć.

Aby wywołać skrypt:

Perl thisscript.perl wsdlURL

Będzie próbować rekurencyjnie pracować z pliku WSDL przez każdego importowanego pliku xsd i utworzyć wszystkie pliki w bieżącym katalogu.