2009-03-20 5 views
18

Les WSDL importent souvent d'autres WSDL et schémas XML.Outil simple pour télécharger tous les WSDL et schémas importés/inclus

Étant donné une URL vers un fichier WSDL, existe-t-il un outil qui télécharge le fichier WSDL et tous les autres fichiers WSDL et schémas référencés?

Idéalement, cet outil serait compatible Java ou Perl.

+0

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

Répondre

13

soapUI dispose d'une visionneuse de contenu WSDL, comme le site Web décrit

Le spectateur interface permet une navigation relativement facile et l'inspection de l'ensemble du contrat pour un WSDL importé, y compris tous importés et inclus les fichiers WSDL et XSD et leurs types contenus , définitions, etc.

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

+12

SoapUI a également la possibilité d'exporter un fichier WSDL vers un fichier local. Faites un clic droit sur le projet et sélectionnez "Export Definition". –

1

L'outil Altova SchemaAgent peut télécharger, visualiser et modéliser un WSDL et plusieurs schémas. C'est très bien quand les choses deviennent complexes.

2

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.

Questions connexes