• Publicidad

SOAP-Lite no funciona como esperaba

Aquí encontrarás todo lo que sea específicamente acerca de módulos de Perl. Ya sea que estás compartiendo tu módulo, un manual o simplemente tienes una duda acerca de alguno.

SOAP-Lite no funciona como esperaba

Notapor danimera » 2013-10-15 09:14 @426

Tengo que consumir un webservice y uso SOAP-Lite con un WSDL, pero cuando llamo el método utilizando el modo debug el soaplite me construye el siguiente xml:
Sintáxis: [ Descargar ] [ Ocultar ]
Using xml Syntax Highlighting
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <soap:Envelope soap:encodingStyle="http://
  3. schemas.xmlsoap.org/soap/encoding/" xmlns:http="http://schemas.xmlsoap.org/wsdl/
  4. http/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:s="http://www.w3
  5. .org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:so
  6. ap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:soapenc="http://schemas.xml
  7. soap.org/soap/encoding/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
  8. xmlns:tns="http://www.achcolombia.com.co/PSEHostingWS" xmlns:wsdl="http://schem
  9. as.xmlsoap.org/wsdl/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  10. <soap:Body>
  11.         <tns:getTransactionInformationHosting>
  12.                 <ticketOfficeID xsi:type="s:int">66</ticketOfficeID>
  13.                 <password xsi:type="s:string">vesta123</password>
  14.                 <paymentID xsi:type="s:string">1234</paymentID>
  15.         </tns:getTransactionInformationHosting>
  16. </soap:Body>
  17. </soap:Envelope>
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Yo esperaría que me creara algo como esto que está en la especificación:
Sintáxis: [ Descargar ] [ Ocultar ]
Using xml Syntax Highlighting
  1. <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  2.   <soap:Body>
  3.     <getTransactionInformationHosting xmlns="http://www.achcolombia.com.co/PSEHostingWS">
  4.       <ticketOfficeID>66</ticketOfficeID>
  5.       <password>string</password>
  6.       <paymentID>string</paymentID>
  7.     </getTransactionInformationHosting>
  8.   </soap:Body>
  9. </soap:Envelope>
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


La respuesta que tengo con el primer xml que he colocado es sencillamente un
Sintáxis: [ Descargar ] [ Ocultar ]
  1. Bad Request 


:( No sé qué podría hacer. Lo otro sería construir manualmente el XML, pero siento que perdería la esencia del SOAP::Lite.
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Publicidad

Re: SOAP-Lite no funciona como esperaba

Notapor explorer » 2013-10-15 09:27 @435

Creo que es el espacio de nombres tns el que está fastidiando. Pero lo que no sé es cómo resolverlo :(
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: SOAP-Lite no funciona como esperaba

Notapor danimera » 2013-10-15 09:35 @441

Definitivamente, así es...

Cuando uso un programa como SOAP UI éste me autogenera un código así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using xml Syntax Highlighting
  1. <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pseh="http://www.achcolombia.com.co/PSEHostingWS">
  2.    <soapenv:Header/>
  3.    <soapenv:Body>
  4.       <pseh:getTransactionInformationHosting>
  5.          <pseh:ticketOfficeID>66</pseh:ticketOfficeID>
  6.          <!--Optional:-->
  7.          <pseh:password>66</pseh:password>
  8.          <!--Optional:-->
  9.          <pseh:paymentID>66</pseh:paymentID>
  10.       </pseh:getTransactionInformationHosting>
  11.    </soapenv:Body>
  12. </soapenv:Envelope>
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Evidentemente el tema es lo que afecta.. Hummm, ¿no hay otra opción? Me tocará construir manualmente el xml :( ¡Qué tristeza!
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Re: SOAP-Lite no funciona como esperaba

Notapor explorer » 2013-10-15 10:10 @465

Respondida: hay que llamar al método ns() para que agregue ese namespace a la generación del XML.

Quizás también con register_ns(). Con este método, queda registrado el espacio de nombres en la cabecera del XML, y luego ya puedes llamar a Data() con un argumento que incluya el espacio de nombres: 'tns:getTransactionInformationHosting'.

Hay más resultados, buscando en Google, por SOAP::Lite namespace.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: SOAP-Lite no funciona como esperaba

Notapor danimera » 2013-10-15 11:48 @533

Perfecto, por ahí la cosa ya mejoró, ahora estoy usando algo así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.                 $response = SOAP::Lite->uri('http://www.jggfddd.com./fghhjjj/')
  2.                    ->proxy($self->cfg('ach_host'))
  3.                    ->ns(undef)
  4.                    ->getTransactionInformationHosting (
  5.                                 SOAP::Data->name('ticketOfficeID')->value(666)->type('int'),
  6.                                 SOAP::Data->name('password')->value('vesta123')->type('string'),
  7.                                 SOAP::Data->name('paymentID')->value('1234')->type('string'),
  8.                         );
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Lo malo es que ahora obtengo error 500, pero ahí vamos ya mejorando.

Obtengo: bad request y este es el xml final generado:
Sintáxis: [ Descargar ] [ Ocultar ]
Using xml Syntax Highlighting
  1. <?xml version="1.0" encoding="UTF-8"?><soap:Envelope soap:encodingStyle="http://
  2. schemas.xmlsoap.org/soap/encoding/" xmlns:namesp1="" xmlns:soap="http://schemas.
  3. xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encod
  4. ing/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/
  5. 2001/XMLSchema-instance"><soap:Body><namesp1:getTransactionInformationHosting><t
  6. icketOfficeID xsi:type="xsd:int">666</ticketOfficeID><password xsi:type="xsd:str
  7. ing">vesta123</password><paymentID xsi:type="xsd:string">1234</paymentID></names
  8. p1:getTransactionInformationHosting></soap:Body></soap:Envelope>
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Lo he pegado tal como salió del debug.
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Re: SOAP-Lite no funciona como esperaba

Notapor danimera » 2013-10-15 12:04 @544

Corrijo. Ahora este es mi xml generado que me muestra el debug de soaplite:
Sintáxis: [ Descargar ] [ Ocultar ]
Using xml Syntax Highlighting
  1. <?xml version="1.0" encoding="UTF-8"?><soap:Envelope soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:pseh="https://desarrollo.pse.com.co/PSEHostingWebServices/PSEHostingWS.asmx" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soap:Body><pseh:getTransactionInformationHosting><ticketOfficeID xsi:type="xsd:int">666</ticketOfficeID><password xsi:type="xsd:string">vesta123</password><paymentID xsi:type="xsd:string">1234</paymentID></pseh:getTransactionInformationHosting></soap:Body></soap:Envelope>
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Efectivamente es lo que espero, pero lastimosamente tengo unos saltos de línea, y cuando copio y pego eso en soapui que es mi programa para soap, obtengo bad request, pero si corrijo el problema de los saltos de líneas, entonces ahí sí consume el webservice...
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Re: SOAP-Lite no funciona como esperaba

Notapor explorer » 2013-10-15 17:02 @751

Los saltos de línea no deberían influir, ya que es un archivo XML... salvo que ocurran en mitad de las marcas o atributos, lo cual no debe suceder nunca.

Podrías derivar la salida a un archivo de texto, y así la pantalla no te crea los saltos de línea.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: SOAP-Lite no funciona como esperaba

Notapor danimera » 2013-10-15 17:38 @777

Bueno, pero mi problema ahora es que me devuelve siempre
Sintáxis: [ Descargar ] [ Ocultar ]
  1. SOAP::Transport::HTTP::Client::send_receive: HTTP::Response=HASH(0x578ab00) 
  2. SOAP::Transport::HTTP::Client::send_receive: HTTP/1.1 500 Internal Server Error 

El debug me muestra esto:
Sintáxis: [ Descargar ] [ Ocultar ]
  1. <?xml version="1.0" encoding="UTF-8"?><soap:Envelope soap:encodingStyle="http:// 
  2. schemas.xmlsoap.org/soap/encoding/" xmlns:namesp1="https://xxx.xx.x 
  3. /xxxWebServices/xxxHostingWS.asmx" xmlns:soap="http://schemas.xmlsoap.org 
  4. /soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns 
  5. :xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSch 
  6. ema-instance"><soap:Body><namesp1:getTransactionInformationHosting><ticketOffice 
  7. ID xsi:type="xsd:int">33</ticketOfficeID><password xsi:type="xsd:string">1234</p 
  8. assword><paymentID xsi:type="xsd:string">1234</paymentID></namesp1:getTransactio 
  9. nInformationHosting></soap:Body></soap:Envelope> 
  10. SOAP::Transport::HTTP::Client::send_receive: HTTP::Response=HASH(0x576db80) 
  11. SOAP::Transport::HTTP::Client::send_receive: HTTP/1.1 500 Internal Server Error 

Si copio y pego ese xml en mi programa soap ui, me funciona bien si arreglo los saltos de línea, obviamente.

MÁS INFORMACIÓN:
Sintáxis: [ Descargar ] [ Ocultar ]
  1. <soap:Body> 
  2. <soap:Fault> 
  3. <faultcode>soap:Client</faultcode> 
  4. <faultstring>Server did not recognize the value of HTTP Header SOAPAction: https://XXXX/PSEHostingWebServices/XXXH ... ionHosting
  5. </faultstring><detail /></soap:Fault> 
  6. </soap:Body> 
  7. </soap:Envelope> 
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Re: SOAP-Lite no funciona como esperaba

Notapor danimera » 2013-10-16 11:04 @502

Finalmente se solucionó el problema de error 500 con soap-lite y servidor en .Net
la clave es:

.Net espera que las acciones los métodos se llamen de la forma:
Sintáxis: [ Descargar ] [ Ocultar ]
  1. XXXHostingWS.asmx/action 

y soap-lite me daba algo como
Sintáxis: [ Descargar ] [ Ocultar ]
  1. XXXHostingWS.asmx#action 

en la documentación del SOAP-lite claramente explica lo que hay que hacer para eso y eso hice, modificar el método on_action (callback) de la siguiente forma:
Sintáxis: [ Descargar ] [ Ocultar ]
  1. $client->on_action( sub { join '/', @_ } ); 

Para que mi código de: cómo consumir un webservice en .Net en Perl con SOAP-Lite debe ser de la siguiente forma:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.                 # Consultamos el ws
  2.                 $response = SOAP::Lite->uri( $self->cfg('ach_ns') );
  3.                 $response->on_action( sub { join '/', @_ } );
  4.  
  5.                 $response->proxy( $self->cfg('ach_host') )->default_ns( $self->cfg('ach_ns') )->action(
  6.                     SOAP::Data->name('ticket')->value($ticket)->type('int'),
  7.                     SOAP::Data->name('password')->value($password)->type('string'),
  8.                     SOAP::Data->name('paymentID')->value($paymentID)->type('string'),
  9.                 )->result;
  10.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Comparto con ustedes esta solución.
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Re: SOAP-Lite no funciona como esperaba

Notapor explorer » 2013-10-16 13:48 @617

Como era de esperar: Micro$oft tocando las narices.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Siguiente

Volver a Módulos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados