Простой инструмент для загрузки всех импортированных/включенных WSDL и схем
WSDL часто импортируют другие WSDL и XML-схему.
Учитывая URL-адрес WSDL, есть ли инструмент, который будет загружать WSDL и все другие ссылки на WSDL и схемы?
В идеале этот инструмент будет либо дружественным Java, либо Perl.
Ответы
Ответ 1
soapUI имеет средство просмотра контента WSDL, поскольку веб-сайт описывает
Средство просмотра интерфейса позволяет относительно легко осуществлять навигацию и проверку всего контракта для импортированного WSDL, включая все импортированные и включенные файлы WSDL и XSD, а также их содержащиеся типы, определения и т.д.
http://www.soapui.org/userguide/interfaces/interfaceeditor.html
Ответ 2
Инструмент Altova SchemaAgent может загружать, визуализировать и моделировать WSDL и несколько схем. Это очень приятно, когда все становится сложным.
Ответ 3
Следующий perl script сделает то, что вы хотите:
#!/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;
Таким образом, он принимает переданный параметр в качестве URL-адреса для получения в качестве первого файла. Затем он сканирует этот файл для атрибутов schemaLocation и загружает каждый из этих файлов рекурсивным образом, пока все схемы не будут найдены или не могут быть найдены.
Чтобы вызвать script:
perl thisscript.perl wsdlURL
Он попытается рекурсивно работать из файла wsdl через каждый импортированный xsd и создавать все файлы в текущем каталоге.