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