Envío de array como parametro al llamar a un Serivcio Web SOAP desde Power Builder
Publicado por Ezequiel (3 intervenciones) el 30/10/2018 19:05:30
Hola a todos, estoy teniendo un problema al llamar a un servicio web desde Power Builder.
Resulta que el Servicio Web fue desarrollado para enviar mails y al llamarlo hay que pasarle entre otras cosas el mail de origen, el de destino, el asunto, el cuerpo del mensaje, etc.
Todo eso funciona bien, pero a la hora de agregar adjuntos, la estructura de adjuntos es un array de tipo attachment (Estructura definida en el servicio web que estoy llamando).
Yo creo estructura principal del request, con el asunto, origen, destino, cuerpo, etc, y le uno la estructura de attachements.
Al mirar el log de lo que se envió al servicio veo algo como esto:
REQUEST:
CLOSED
POST /WS_Comunicacion/Comunicacion.svc?WSDL HTTP/1.1
Host: 192.168.10.60
Connection: Keep-Alive
User-Agent: EasySoap++/0.6
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://tempuri.org/IComunicacion/send_message"
Content-Length: 26539
<E:Envelope
xmlns:E="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:A="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:s="http://www.w3.org/2001/XMLSchema-instance"
xmlns:y="http://www.w3.org/2001/XMLSchema"
E:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<E:Body>
<m:send_message xmlns:m="http://tempuri.org/">
<m:message_data s:type="ns1:MessageSendingRequest" xmlns:ns1="http://schemas.datacontract.org/2004/07/WS_Comunicacion">
<ns1:attachments>
<MessageAttachment s:type="ns1:MessageAttachment">
<ns1:file s:type="y:string">Archivo adjunto en Base64</ns1:file>
<ns1:name s:type="y:string">Nombre_archivo.pdf</ns1:name>
</MessageAttachment>
</ns1:attachments>
<ns1:channel s:type="y:string">XXX</ns1:channel>
<ns1:message_content s:type="ns1:MessageContentContract">
<ns1:from s:type="y:string">[email protected]</ns1:from>
<ns1:to s:type="y:string">[email protected]</ns1:to>
<ns1:subject s:type="y:string">Asunto</ns1:subject>
<ns1:body s:type="y:string">Cuerpo del mensaje</ns1:body>
<ns1:body_params s:type="y:string"></ns1:body_params>
</ns1:message_content>
<ns1:mode s:type="y:string">XXXX</ns1:mode>
<ns1:origin s:type="y:string">XXXX</ns1:origin>
<ns1:redirect_url s:type="y:string"></ns1:redirect_url>
</m:message_data>
</m:send_message>
</E:Body>
</E:Envelope>
El problema está en los tags marcados en negrita: MessageAttachment. Esos se generan automaticamente al llamar al servicio, pero no se les pone el prefijo "ns1:". Por lo cual el servicio detecta que ese tag no existe y lo omite. Y los adjuntos nunca llegan.
Revisé todas las documentaciones de PowerBuilder pero nadie explica esa parte.
Alguien paso por algo similar? Saben como se puede forzar a que un TAG auto generado al llamar al servicio tenga prefijo?
Desde ya muchas gracias por la ayuda.
Saludos.
Resulta que el Servicio Web fue desarrollado para enviar mails y al llamarlo hay que pasarle entre otras cosas el mail de origen, el de destino, el asunto, el cuerpo del mensaje, etc.
Todo eso funciona bien, pero a la hora de agregar adjuntos, la estructura de adjuntos es un array de tipo attachment (Estructura definida en el servicio web que estoy llamando).
Yo creo estructura principal del request, con el asunto, origen, destino, cuerpo, etc, y le uno la estructura de attachements.
Al mirar el log de lo que se envió al servicio veo algo como esto:
REQUEST:
CLOSED
POST /WS_Comunicacion/Comunicacion.svc?WSDL HTTP/1.1
Host: 192.168.10.60
Connection: Keep-Alive
User-Agent: EasySoap++/0.6
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://tempuri.org/IComunicacion/send_message"
Content-Length: 26539
<E:Envelope
xmlns:E="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:A="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:s="http://www.w3.org/2001/XMLSchema-instance"
xmlns:y="http://www.w3.org/2001/XMLSchema"
E:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<E:Body>
<m:send_message xmlns:m="http://tempuri.org/">
<m:message_data s:type="ns1:MessageSendingRequest" xmlns:ns1="http://schemas.datacontract.org/2004/07/WS_Comunicacion">
<ns1:attachments>
<MessageAttachment s:type="ns1:MessageAttachment">
<ns1:file s:type="y:string">Archivo adjunto en Base64</ns1:file>
<ns1:name s:type="y:string">Nombre_archivo.pdf</ns1:name>
</MessageAttachment>
</ns1:attachments>
<ns1:channel s:type="y:string">XXX</ns1:channel>
<ns1:message_content s:type="ns1:MessageContentContract">
<ns1:from s:type="y:string">[email protected]</ns1:from>
<ns1:to s:type="y:string">[email protected]</ns1:to>
<ns1:subject s:type="y:string">Asunto</ns1:subject>
<ns1:body s:type="y:string">Cuerpo del mensaje</ns1:body>
<ns1:body_params s:type="y:string"></ns1:body_params>
</ns1:message_content>
<ns1:mode s:type="y:string">XXXX</ns1:mode>
<ns1:origin s:type="y:string">XXXX</ns1:origin>
<ns1:redirect_url s:type="y:string"></ns1:redirect_url>
</m:message_data>
</m:send_message>
</E:Body>
</E:Envelope>
El problema está en los tags marcados en negrita: MessageAttachment. Esos se generan automaticamente al llamar al servicio, pero no se les pone el prefijo "ns1:". Por lo cual el servicio detecta que ese tag no existe y lo omite. Y los adjuntos nunca llegan.
Revisé todas las documentaciones de PowerBuilder pero nadie explica esa parte.
Alguien paso por algo similar? Saben como se puede forzar a que un TAG auto generado al llamar al servicio tenga prefijo?
Desde ya muchas gracias por la ayuda.
Saludos.
Valora esta pregunta
0