• Publicidad

Cliente Perl consumiendo servicio Java usando WSDL

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Re: Cliente Perl consumiendo servicio Java usando WSDL

Notapor dom87 » 2013-01-28 09:07 @421

Bueno, ya tengo implementado mi webservice con la variante que me comentaba explorer (mod_perl), ahora tengo un problemilla al retornar información con tipos de datos complejos (array, hash), con la variante que comenta panterozo (utilizando SOAP::Data) me funciona bien consumiendo desde un cliente Perl, no así desde uno PHP, ¿alguna idea?, acá dejo mi solución:

WSDL:
Sintáxis: [ Descargar ] [ Ocultar ]
Using xml Syntax Highlighting
  1. <?xml version="1.0"?>
  2. <wsdl:definitions name="AritmeticaServicio"
  3.    targetNamespace="urn:Webservice"
  4.    xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
  5.     xmlns:tns="urn:Webservice"
  6.     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  7.     xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
  8.     xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
  9.     xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
  10.     xmlns="http://schemas.xmlsoap.org/wsdl/"
  11.     xmlns:tns1="urn:Webservice"
  12.     xmlns:typens="urn:Webservice">
  13. <wsdl:types>
  14.                 <schema targetNamespace="urn:Webservice" xmlns="http://www.w3.org/2001/XMLSchema">
  15.                         <import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
  16.                        
  17.                         <complexType name="Data">
  18.                                 <sequence>
  19.                                         <element name="dato1" type="xsd:string" />
  20.                                         <element name="dato2" type="xsd:string" />
  21.                                 </sequence>
  22.                         </complexType>
  23.                        
  24.                         <complexType name="ArrayOfString">
  25.                                         <sequence>
  26.                                                         <!-- son 4 elementos string -->
  27.                                                         <element minOccurs="2" maxOccurs="2" name="string" nillable="true" type="xsd:string"/>
  28.                                         </sequence>
  29.                         </complexType>
  30.                 </schema>
  31. </wsdl:types>
  32.  
  33. <!-- mesagges -->
  34.   <wsdl:message name="AritmeticaPeticion">
  35.     <wsdl:part name="operando1" type="xsd:float" />
  36.     <wsdl:part name="operando2" type="xsd:float" />
  37.   </wsdl:message>
  38.  
  39.   <wsdl:message name="AritmeticaRespuesta">
  40.     <wsdl:part name="respuesta" type="xsd:float" />
  41.   </wsdl:message>
  42.  
  43.   <wsdl:message name="visitasPeticion">
  44.     <wsdl:part name="peticion" type="xsd:float" />
  45.   </wsdl:message>
  46.  
  47.   <wsdl:message name="visitasRespuesta">
  48.     <wsdl:part name="visitas" type="typens:Data" />
  49.   </wsdl:message>
  50.  <!-- mesagges end -->
  51.  
  52.  <!-- portypes -->
  53.   <wsdl:portType name="AritmeticaPort">
  54.          
  55.     <wsdl:operation name="sumar">
  56.       <wsdl:input message="tns:AritmeticaPeticion" />
  57.       <wsdl:output message="tns:AritmeticaRespuesta" />
  58.     </wsdl:operation>
  59.    
  60.     <wsdl:operation name="visitas">
  61.           <wsdl:input message="tns:visitasPeticion" />
  62.       <wsdl:output message="tns:visitasRespuesta" />
  63.     </wsdl:operation>
  64.    
  65.   </wsdl:portType>
  66.   <!-- portypes end -->
  67.  
  68.  <!-- binding -->
  69.   <wsdl:binding name="AritmeticaBinding" type="tns:AritmeticaPort">
  70.     <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
  71.    
  72.     <wsdl:operation name="sumar">
  73.         <wsdlsoap:operation soapAction="urn:Webservice#sumar" />
  74.         <wsdl:input>
  75.           <wsdlsoap:body use="encoded" namespace="urn:Webservice" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
  76.         </wsdl:input>
  77.         <wsdl:output>
  78.           <wsdlsoap:body use="encoded" namespace="urn:Webservice" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
  79.         </wsdl:output>
  80.     </wsdl:operation>
  81.    
  82.     <wsdl:operation name="visitas">
  83.         <wsdlsoap:operation soapAction="urn:Webservice#visitas" />
  84.         <wsdl:input>
  85.           <wsdlsoap:body use="encoded" namespace="urn:Webservice" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />      
  86.         </wsdl:input>
  87.         <wsdl:output>
  88.           <wsdlsoap:body use="encoded" namespace="urn:Webservice" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />      
  89.         </wsdl:output>
  90.     </wsdl:operation>
  91.    
  92.   </wsdl:binding>
  93.   <!-- binding end-->
  94.  
  95.  
  96.   <wsdl:service name="AritmeticaServicio">
  97.     <wsdl:port name="AritmeticaPort" binding="tns:AritmeticaBinding">
  98.       <wsdlsoap:address location="http://localhost/WebServices/aritmetica/servidor.pl" />
  99.     </wsdl:port>
  100.   </wsdl:service>
  101. </wsdl:definitions>
  102.  
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


Servidor:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2.  
  3. use strict;
  4. use SOAP::Transport::HTTP;
  5. use C4::Webservice;
  6.  
  7. SOAP::Transport::HTTP::CGI  
  8.   -> dispatch_to('Webservice')
  9.   -> handle;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Cliente:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2. use SOAP::Lite +trace => 'debug';
  3. use Data::Dumper;
  4. use strict;
  5. #use SOAP::Lite;
  6.  
  7. my $clienteSOAP = SOAP::Lite->service("http://localhost/WebServices/aritmetica/aritmetica.wsdl");
  8. my $result = $clienteSOAP->sumar(60,20);
  9. my $visitas = $clienteSOAP->visitas();
  10.  
  11. print "El resultado de sumar  es: " . $result . "\n";
  12. foreach  (keys $visitas){
  13.   print $visitas->{$_}."\n";
  14. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Configuración Apache (mod_perl):
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. <Files servidor.pl>
  2.         SetHandler perl-script
  3.         PerlResponseHandler ModPerl::Registry
  4.         PerlOptions +ParseHeaders
  5.         PerlSendHeader On
  6.         Options +ExecCGI
  7. </Files>
  8.  
  9. PerlRequire /home/dom/Escritorio/webservice/aritmetica/startup.pl
  10.  
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Código de startup.pl:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. use strict;
  4. use warnings;
  5. use lib qw(/usr/share/sigb2/lib);  # this line fixe PERL5LIB !
  6.  
  7. # you can add here what you want.
  8. # see perl.apache.org for more details.
  9.  
  10. 1;                          # don't forget to add it.
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Avatar de Usuario
dom87
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2011-04-25 10:18 @471
Ubicación: Cuba, La Habana

Publicidad

Re: Cliente Perl consumiendo servicio Java usando WSDL

Notapor dom87 » 2013-02-01 09:28 @436

Bien, después de leer algunos tutoriales y ejemplos y siguiendo las recomendaciones de este fructífero hilo solucioné la cuestión de retornar datos complejos (en mi caso arrays), acá dejo mi código Perl y el fragmento que incorporé en el archivo .wsdl
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my @array = (
  2.     SOAP::Data->name(
  3.         "item" => \SOAP::Data->value(
  4.             SOAP::Data->name( "tipo"     => "hoy" ),
  5.             SOAP::Data->name( "cantidad" => $visitas{hoy} )->type('string')
  6.         )
  7.         )->type("Visita"),
  8.     SOAP::Data->name(
  9.         "item" => \SOAP::Data->value(
  10.             SOAP::Data->name( "tipo"     => "semana" ),
  11.             SOAP::Data->name( "cantidad" => $visitas{semana} )->type('string')
  12.         )
  13.         )->type("Visita"),
  14.     SOAP::Data->name(
  15.         "item" => \SOAP::Data->value(
  16.             SOAP::Data->name( "tipo"     => "mes" ),
  17.             SOAP::Data->name( "cantidad" => $visitas{mes} )->type('string')
  18.         )
  19.         )->type("Visita"),
  20.     SOAP::Data->name(
  21.         "item" => \SOAP::Data->value(
  22.             SOAP::Data->name( "tipo"     => "anno" ),
  23.             SOAP::Data->name( "cantidad" => $visitas{anno} )->type('string')
  24.         )
  25.         )->type("Visita")
  26. );
  27.  
  28. return SOAP::Data->name( visitas => \SOAP::Data->value(@array) );
  29.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Sintáxis: [ Descargar ] [ Ocultar ]
Using xml Syntax Highlighting
  1. <types>
  2.     <xsd:schema targetNamespace="urn:SIGBWS" xmlns="http://www.w3.org/2001/XMLSchema">
  3.         <xsd:complexType name="VisitasArray">
  4.             <xsd:complexContent>
  5.                 <xsd:restriction base="soapenc:Array">
  6.                     <xsd:attribute ref="soapenc:arrayType" wsdl:arrayType="typens:Visita[]" />
  7.                 </xsd:restriction>
  8.             </xsd:complexContent>
  9.         </xsd:complexType>
  10.         <xsd:complexType name="Visita">
  11.             <xsd:all>
  12.                 <xsd:element name="tipo" type="xsd:string" />
  13.                 <xsd:element name="cantidad" type="xsd:string" />
  14.             </xsd:all>
  15.         </xsd:complexType>
  16.     </xsd:schema>
  17. </types>
  18.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Última edición por explorer el 2013-02-01 16:54 @746, editado 1 vez en total
Razón: Formateado de código con Perltidy y Kate
Avatar de Usuario
dom87
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2011-04-25 10:18 @471
Ubicación: Cuba, La Habana

Anterior

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Bing [Bot] y 8 invitados

cron