Ver Mensaje Individual
  #1  
Antiguo 27-06-2018
alejozd alejozd is offline
Miembro
 
Registrado: jul 2010
Posts: 16
Reputación: 0
alejozd Va por buen camino
Respuesta multipart de Web Service SOAP

Hola, tengo un problema al consumir un servicioweb SOAP, el servicio utiliza WS-Security y credenciales utilizando el modelo Username Token. Hasta esta parte ya logre armar el request de manera correcta.
El mensaje de error es este: El documento XML debe tener un elemento de nivel superior.
El problema esta en la respuesta del Web Service, en el evento (OnBeforeExecute y OnAfterExecute) del objeto HTTPRIO puedo ver la trama que se envía al servicio web y en el after puedo ver la trama que retorna el servicio. Al parecer la respuesta no es un XML, porque viene con un identificador que inicia y al final después del XML vuelve a cerrar.

Código Delphi [-]
--uuid:8b0f2641-d514-475c-91a2-3a5e7c39856e
Content-Type: application/xop+xml; charset=UTF-8; type="text/xml"
Content-Transfer-Encoding: binary
Content-ID: message@cxf.apache.org>

 --Aqui todo el XML bien formado....
--uuid:8b0f2641-d514-475c-91a2-3a5e7c39856e--

Haciendo las pruebas con el programa SOAPUI, la trama enviada retorna bien la respuesta y muestra el XML.

Ahora bien, estoy haciendo la prueba con Delphi Berlin, utilizo el componente HTTPRIO.
Primero cargo el objeto HTTPRIO en el metodo de la interfaz que me crea el WSDL.
Código Delphi [-]
WService.GetinvoiceService(False,Trim(edtUrl.Text),HTTPRIO1);
Luego lleno los datos de cabecera, luego le paso el objeto de cabecera a HTTPRIO
Código Delphi [-]
HTTPRIO1.SOAPHeaders.Send(vheadSeguridad);
Luego lleno los datos que requiere el metodo y por ultimo hago el envio.
Código Delphi [-]
vFolios := (HTTPRIO1 as WServiceCarvajal.invoiceService).CheckAvailableDocuments(vFoliosE);
donde las variables de vfolios y vFoliosE están definidas de la siguiente manera.
Código Delphi [-]
  vFolios : CheckAvailableDocumentsResponse;
  vFoliosE : CheckAvailableDocumentsRequest;

Haciendo un paso a paso, el error esta cuando intenta cargar la respuesta en el procedure
Código Delphi [-]
procedure TXMLDocument.LoadData;

Agradezco cualquier aporte.
Responder Con Cita