Je tente d'accéder à un service Web en utilisant SOAP via Perl et j'ai des problèmes pour appeler les fonctions du service qui nécessitent des paramètres. Le XSD qui dicte l'appel SOAP dit,Fonctions d'appel avec des paramètres utilisant SOAP avec Perl
<xs:complexType name="getVersion">
<xs:sequence/>
</xs:complexType>
<xs:complexType name="getVersionResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="xs:string"/>
</xs:sequence>
</xs:complexType>
...
<xs:complexType name="enumerateEntities">
<xs:sequence>
<xs:element name="entityId" type="xs:int"/>
<xs:element minOccurs="0" name="entityType" type="tns:entityType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="enumerateEntitiesResponse">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="xs:int"/>
</xs:sequence>
</xs:complexType>
Selon la documentation pour le service, les signatures pour les deux fonctions sont:
String getVersion()
int[] enumerateEntities (int entityId, EntityType entityType)
Je suis en mesure d'appeler la première fonction, ce qui nécessite aucun paramètre d'entrée, à l'aide:
#!/usr/bin/perl
use SOAP::Lite;
my $uri = 'http://wsdl.mydomain.com/';
my $service = SOAP::Lite
-> uri($uri)
-> on_action(sub { sprintf '"Call by on_action: %s"',shift})
-> proxy('http://192.168.1.100:8688/MyService/services/MyService.MyServicePort/');
$method = SOAP::Data->name("MyService")->attr({xmlns => $uri});
$getVersion = SOAP::Data->name("getVersion")->attr({xmlns=>$uri});#line 11
my $theResult = $service->getVersion;
unless ($theResult->fault){ print "Version: "; print $theResult->result;}
else {print $theResult->faultstring;}
... mais ma tentative (ci-dessous) à appeler une fonction avec des paramètres en changeant la ligne 11 sur ont été vains.
...
@entityId = SOAP::Data->type('int')->name('entityId')->value(0);
@entityType = SOAP::Data->type('EntityType')->name('entityType')->value(NODE);
$enumerateEntities = SOAP::Data->name("enumerateEntities",@entityId,@entityType)->attr({xmlns=>$uri});
my $result2 = $service->enumerateEntities;
print $result2->result;
Qu'est-ce que je fais mal qui me empêche d'appeler des fonctions du service avec des paramètres?
Edit: Voici l'exemple de code mis à jour avec l'aide de SOAP :: WSDL
#!/usr/bin/perl
use SOAP::WSDL;
use Data::Dumper;
my $service = SOAP::WSDL->new(
wsdl => 'http://192.168.1.100:8688/MyService/services/MyService.MyServicePort?wsdl',
outputhash => 1
);
-je faire cela, mais je suis dit, « ne peut pas namespace importer ... sans uri de base. Utilisez> parse_uri < or > set_uri
J'ai un problème semblable, et j'ai essayé cette solution, et les paramètres ne font tout simplement pas à la demande sortante http://stackoverflow.com/questions/1765248 – aidan
Pouvez-vous Fournir le service et les URL WSDL pour le test? Ce qui précède fonctionne pour beaucoup de services –