• 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 panterozo » 2011-06-11 20:24 @891

explorer escribiste:Como ya he dicho en otras ocasiones, a mi Java ya no me sirve para nada.


Concuerdo con explorer ;).

Qué bueno que hayas podido hacer el servicio web ;)

Saludos ;)
panterozo
Perlero nuevo
Perlero nuevo
 
Mensajes: 160
Registrado: 2010-01-26 08:36 @400

Publicidad

Re: Cliente Perl consumiendo servicio Java usando WSDL

Notapor Thomson_ » 2011-10-31 23:07 @005

scout escribiste:Lo probaré, a ver si puedo repetir lo que lograste... Mientras mira lo que te contaba sobre montar un servicio en Java: instala el Netbeans 7 y el glassfish-3.1 que es el servidor, no te interferirá con el Apache, trabaja en el 8080 si mal no recuerdo y sigue estas instrucciones... Tiene un vídeo más completo pero comienza con algo simple...

En las indicaciones te mostrará cómo probarlo directamente... Con ello te sacas de la duda de su funcionamiento... Y puedes exportar el WSDL... Pero obviamente la idea no es usar Java... Si no Perl... Míralo y cuéntame.

http://www.ooscarr.com/nerd/elblog/2008 ... web-en.php

Con esto te olvidas del WSDL y demás configuraciones que te traen dolores de cabeza, pudiendo focalizar en la lógica del servicio a brindar... que es la idea principal...


¡Hola a todos!

Es un gusto ser parte de este gran foro... y sobre todo, por la ayuda que le brindan a las personas, muchas gracias.

Bien, soy nuevo en Perl, y para empezar he visto el tutorial que indican en la página, creé el web service como lo indican, pero quisiera saber cómo consumirlo.

Tengo este código:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use SOAP::Lite;
  2. $service = SOAP::Lite -> uri('http://info.geren/') -> proxy('http://localhost:9191/informacion/holla?WSDL');
  3. $result = $service
  4.         -> hello("Peter")
  5.         ->result();
  6. print  "\t", $result, "\n\n";
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Resultado desde la terminal
Hello null !


Debería obtener "Hello Peter" pero es como si no me envía el parámetro al @webmethod que es "hello".

No sé si estoy cerca o muy lejos, pero desde ya les agradezco la comprensión y ayuda.
Última edición por Thomson_ el 2011-11-01 10:57 @498, editado 1 vez en total
Thomson_
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2011-10-31 22:50 @993

Re: Cliente Perl consumiendo servicio Java usando WSDL

Notapor scout » 2011-11-01 02:59 @166

Trabaja todo en Perl, los ejemplos que hay en el foro...

Por otro lado luego de muchas pruebas Java/Perl, si vas a montar servicios te recomiendo todo en Perl, Java es muy lindo y a nivel de montar servicios es de lo más completo pero con Perl es bueno, bonito y barato... ¡Ojo! es una opinión de un novato que probó combinaciones raras de servicios y clientes...
scout
Perlero nuevo
Perlero nuevo
 
Mensajes: 228
Registrado: 2009-10-28 13:50 @618

Re: Cliente Perl consumiendo servicio Java usando WSDL

Notapor explorer » 2011-11-01 08:52 @411

Bienvenido a los foros de Perl en español, Thomson_.

Yo el programa cliente lo veo bien. Pero el servidor no sé cómo es, así que no podemos decirte más...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Cliente Perl consumiendo servicio Java usando WSDL

Notapor Thomson_ » 2011-11-01 10:11 @466

Gracias por la información, scout. No conocía a Perl con tantas opciones 8)

Bien, el código que genera Netbeans es este:

Sintáxis: [ Descargar ] [ Ocultar ]
Using java Syntax Highlighting
  1. package geren.info;
  2. import javax.jws.WebService;
  3. import javax.jws.WebMethod;
  4. import javax.jws.WebParam;
  5.  
  6. @WebService(serviceName = "holla")
  7. public class holla {
  8.  
  9.     /** This is a sample web service operation */
  10.     @WebMethod(operationName = "hello")
  11.     public String hello(@WebParam(name = "name") String txt) {
  12.         return "Hello " + txt + " !";
  13.     }
  14. }
Coloreado en 0.012 segundos, usando GeSHi 1.0.8.4


El archivo wsdl generado por Netbeans http://localhost:9191/informacion/holla?WSDL, contiene esto,

Sintáxis: [ Descargar ] [ Ocultar ]
Using xml Syntax Highlighting
  1. This XML file does not appear to have any style information associated with it. The document tree is shown below.
  2.      
  3. <!--
  4. Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is Metro/2.1.1-b09 (branches/2.1-6834; 2011-07-16T17:14:48+0000) JAXWS-RI/2.2.5-promoted-b04 JAXWS/2.2.
  5. -->
  6. <!--
  7. Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is Metro/2.1.1-b09 (branches/2.1-6834; 2011-07-16T17:14:48+0000) JAXWS-RI/2.2.5-promoted-b04 JAXWS/2.2.
  8. -->
  9. <definitions targetNamespace="http://info.geren/" name="holla">
  10.         <types>
  11.                 <xsd:schema>
  12.                         <xsd:import namespace="http://info.geren/" schemaLocation="http://localhost:9191/informacion/holla?xsd=1"/>
  13.                 </xsd:schema>
  14.         </types>
  15. <message name="hello">
  16.         <part name="parameters" element="tns:hello"/>
  17. </message>
  18. <message name="helloResponse">
  19.         <part name="parameters" element="tns:helloResponse"/>
  20. </message>
  21. <portType name="holla">
  22.         <operation name="hello">
  23.                 <input wsam:Action="http://info.geren/holla/helloRequest" message="tns:hello"/>
  24.                 <output wsam:Action="http://info.geren/holla/helloResponse" message="tns:helloResponse"/>
  25.         </operation></portType>
  26. <binding name="hollaPortBinding" type="tns:holla">
  27.         <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
  28.         <operation name="hello">
  29.                 <soap:operation soapAction=""/>
  30.                 <input>
  31.                         <soap:body use="literal"/>
  32.                 </input>
  33.                 <output>
  34.                         <soap:body use="literal"/>
  35.                 </output>
  36.         </operation>
  37. </binding>
  38. <service name="holla">
  39.         <port name="hollaPort" binding="tns:hollaPortBinding">
  40.                 <soap:address location="http://localhost:9191/informacion/holla"/>
  41.         </port>
  42.         </service>
  43. </definitions>
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

:?:
Thomson_
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2011-10-31 22:50 @993

Re: Cliente Perl consumiendo servicio Java usando WSDL

Notapor dom87 » 2013-01-22 17:18 @763

Estuve revisando algunos hilos de los foros del sitio, pues me estoy iniciando en el tema de los webservices con Perl. Resulta que debo exponer el/los servicios utilizando WSDL, pero no he dado con ello para generar el archivo *.wsdl y que funcione correctamente. He probado varios ejemplos uno de ellos el que expongo a consideración en espera de ayuda. Para ello utilicé el módulo WSDL::Generator, este es el archivo que se genera:
Sintáxis: [ Descargar ] [ Ocultar ]
Using xml Syntax Highlighting
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <definitions name="Cafetera" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" targetNamespace="http://localhost:8090/cafetera.wsdl" xmlns:tns="http://localhost:8090/cafetera.wsdl" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xsdl="http://localhost:8090/cafetera.xsd">
  3.         <types>
  4.                 <xsd:schema targetNamespace="http://localhost:8090/cafetera.xsd">
  5.                         <xsd:element name="prepararCafeRequest" type="xsd:string" />
  6.                         <xsd:element name="prepararCafeResponse" type="xsd:string" />
  7.                 </xsd:schema>
  8.         </types>
  9.         <message name="prepararCafeRequest">
  10.                 <part name="prepararCafeRequestSoapMsg" element="xsdl:prepararCafeRequest"/>
  11.         </message>
  12.         <message name="prepararCafeResponse">
  13.                 <part name="prepararCafeResponseSoapMsg" element="xsdl:prepararCafeResponse"/>
  14.         </message>
  15.         <portType name="CafeteraCafeteraPortType">
  16.                 <operation name="prepararCafe">
  17.                         <input message="tns:prepararCafeRequest" />
  18.                         <output message="tns:prepararCafeResponse" />
  19.                 </operation>
  20.         </portType>
  21.         <binding name="CafeteraCafeteraBinding" type="tns:CafeteraCafeteraPortType">
  22.                 <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
  23.                         <operation name="prepararCafe">
  24.                                 <soap:operation style="document" soapAction=""/>
  25.                                 <input>
  26.                                         <soap:body use="literal"/>
  27.                                 </input>
  28.                                 <output>
  29.                                         <soap:body use="literal"/>
  30.                                 </output>
  31.                         </operation>
  32.         </binding>
  33.         <service name="Cafetera">
  34.                 <documentation>
  35.                         Servicio Web de Prueba
  36.                 </documentation>
  37.                 <port name="CafeteraCafeteraPort" binding="tns:CafeteraCafeteraBinding">
  38.                         <soap:address location="http://localhost:8090/Cafetera.pm"/>
  39.                 </port>
  40.         </service>
  41. </definitions>
  42.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

y utilizando el cliente con Perl desde el shell:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $client = SOAP::Lite->service('http://localhost:8090/cafetera1.wsdl');
  2.   my $resultado = $client->prepararCafe(5);
  3.   print "Preparando cafe: ".$resultado."\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

tengo la siguiente salida:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. SOAP::Transport::HTTP::Client::send_receive: POST http://localhost:8090/Cafetera.pm HTTP/1.1
  2. Accept: text/xml
  3. Accept: multipart/*
  4. Accept: application/soap
  5. Content-Length: 566
  6. Content-Type: text/xml; charset=utf-8
  7. SOAPAction: ""
  8.  
  9. <?xml version="1.0" encoding="UTF-8"?><soap:Envelope soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsdl="http://localhost:8090/cafetera.xsd" xmlns:tns="http://localhost:8090/cafetera.wsdl" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><tns:prepararCafe><prepararCafeRequest xsi:type="xsd:string">5</prepararCafeRequest></tns:prepararCafe></soap:Body></soap:Envelope>
  10. SOAP::Transport::HTTP::Client::send_receive: HTTP/1.1 200 OK
  11. Connection: close
  12. Date: Tue, 22 Jan 2013 21:28:08 GMT
  13. Accept-Ranges: bytes
  14. ETag: "85c31-15d-4d3e73bcc6640"
  15. Server: Apache/2.2.22 (Ubuntu)
  16. Content-Length: 349
  17. Content-Type: text/x-perl
  18. Last-Modified: Tue, 22 Jan 2013 21:26:41 GMT
  19. Client-Date: Tue, 22 Jan 2013 21:28:08 GMT
  20. Client-Peer: 127.0.0.1:8090
  21. Client-Response-Num: 1
  22.  
  23. #!/usr/bin/perl -w
  24. # Servicio web de ejemplo
  25. package Cafetera;
  26. use strict;
  27. # Este es el constructor
  28. sub new{
  29.  my $proto = shift;
  30.  my $class = ref($proto) || $proto;
  31.  my $tasas = 0;
  32.  bless($tasas,$class);
  33. }
  34. sub prepararCafe{
  35.  shift;
  36.  my $tasas = shift;
  37.  #print STDERR "Llamado con el parámetro $tasas";
  38.  return "Se prepararon ".$tasas." tasas";
  39. }
  40. 1;
  41.  
  42. not well-formed (invalid token) at line 1, column 1, byte 1 at /usr/lib/perl5/XML/Parser.pm line 187
  43. #!/usr/bin/perl -w
  44. # Servicio web de ejemplo
  45. package Cafetera;
  46. use strict;
  47. # Este es el constructor
  48. sub new{
  49.  my $proto = shift;
  50.  my $class = ref($proto) || $proto;
  51.  my $tasas = 0;
  52.  bless($tasas,$class);
  53. }
  54. sub prepararCafe{
  55.  shift;
  56.  my $tasas = shift;
  57.  #print STDERR "Llamado con el parámetro $tasas";
  58.  return "Se prepararon ".$tasas." tasas";
  59. }
  60. 1; at cliente.pl line 19
  61.  
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Al parecer hay algún reporte de error. También probé generando el *.wsdl con Pod::WSDL, pero mayormente hay que agregar manualmente el contenido, ¿alguna sugerencia?

Gracias de antemano.
Avatar de Usuario
dom87
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2011-04-25 10:18 @471
Ubicación: Cuba, La Habana

Re: Cliente Perl consumiendo servicio Java usando WSDL

Notapor explorer » 2013-01-22 23:16 @011

Esta línea es la clave:

Content-Type: text/x-perl

Quiere decir que el servidor no ha ejecutado el programa Perl que hace de servidor, sino que te le ha devuelto tal cual, es decir, como un archivo de texto codificado en Perl.

Algo debes tener mal en el servidor web o de aplicaciones, que no está ejecutando el programa servidor.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Cliente Perl consumiendo servicio Java usando WSDL

Notapor dom87 » 2013-01-23 09:03 @418

Gracias por la respuesta, explorer. ¿Alguna idea de cuál pudiera ser el problema o los permisos que deben tener los archivos tanto *.wsdl como .pm para que se ejecuten desde el servidor? Por cierto, este es log del Apache cuando intento acceder al servicio web a través de un cliente php:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
PHP Fatal error:  Uncaught SoapFault exception: [Client] Function ("prepararCafe") is not a valid method for this service in /var/www/webservice.php:7
Stack trace:
#0 /var/www/webservice.php(7): SoapClient->__call('prepararCafe', Array)
#1 /var/www/webservice.php(7): SoapClient->prepararCafe(5)
#2 {main}
  thrown in /var/www/webservice.php on line 7
 
Coloreado en 0.000 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

Re: Cliente Perl consumiendo servicio Java usando WSDL

Notapor explorer » 2013-01-23 14:47 @657

No me dice nada el mensaje de error de PHP, pero supongo que es por lo mismo: el servidor no ha respondido con una respuesta de un servicio, sino con un simple archivo de texto codificado en Perl :)

Primero debes configurar el servidor para que ejecute el código Perl del lado del servidor.

Bastará con indicar un directorio del sistema al que el Apache tiene acceso, como contenedor de código ejecutable.

Para ponerlo en marcha, depende de la tecnología que vayas a usar con Apache:


Resumen: o te creas un servidor propio con HTTP::Daemon, o usas el Apache. Y para este último, lo configuras como si fuera a ejecutar scripts CGI (AddHandler cgi-script para configurar según la extensión del archivo, ScriptAlias para configurar un determinado directorio, junto con Options ExecCGI), o usas una tecnología más completa (y complicada) con mod_perl y resto de módulos Apache:: (SetHandler perl-script)

Muchos más detalles en http://www.soaplite.com.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Cliente Perl consumiendo servicio Java usando WSDL

Notapor dom87 » 2013-01-24 16:10 @715

Gracias por la pronta respuesta, explorer. Ya estaba analizando la variante que me comentas sobre utilizar mod_perl, ya estoy implementando una solución sobre ello, y así, como decimos en buen cubano, mato dos pájaros de un tiro: el tema de los webservices y el rendimiento de mi sistema.
Avatar de Usuario
dom87
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2011-04-25 10:18 @471
Ubicación: Cuba, La Habana

AnteriorSiguiente

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado