Le script Perl suivant va faire ce que vous voulez:
#!/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;
En résumé, il prend le passé en paramètre comme URL pour récupérer que le premier fichier. Il analyse ensuite ce fichier pour les attributs schemaLocation et télécharge chacun de ces fichiers de manière récursive jusqu'à ce que tous les schémas soient localisés ou introuvables.
Pour appeler le script:
perl thisscript.perl wsdlURL
Il tentera de travailler récursive à partir du fichier wsdl à travers chaque xsd importé et créer tous les fichiers dans le répertoire courant.
Je suis à la recherche d'un API ou d'un outil de ligne de commande gratuit. Je ne cherche pas tellement de suggestions d'applications. – zzztimbo