ventajas tutorial supported source open espaƱol descargar wso2 wso2esb

tutorial - wso2 identity server



DeclaraciĆ³n WSO2 XML (3)

¿Cómo capturó el mensaje SOAP? Puede usar Tcpmon o simplemente agregar un mediador de registro con el nivel de registro completo para observar el mensaje completo. Supongo que lo que has observado es cuerpo JABON. No necesita agregar declaración xml, etc. manualmente.

<?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> <soap:Body xmlns:m="http://www.example.org/stock"> <m:GetStockPriceResponse> <m:Price>34.5</m:Price> </m:GetStockPriceResponse> </soap:Body> </soap:Envelope>

Estoy usando WSO2 ESB 4.0.3 para implementar un servicio simple. Tengo un servicio devolviendo el siguiente XML:

<Employees> <Employee> <EmployeeID>JOHNDOE1</EmployeeID> <FirstName>JOHN</FirstName> <LastName>DOE</LastName> </Employee> <Status>1</Status> </Employees>

El problema que tengo es que no hay una declaración XML. ¿Hay alguna configuración que devuelva la respuesta con la declaración XML incluida, o debo usar la respuesta de ESB para agregarla? Esperaba algo como:

<?xml version="1.0" encoding="utf-8"?> <Employees> <Employee> <EmployeeID>JOHNDOE1</EmployeeID> <FirstName>JOHN</FirstName> <LastName>DOE</LastName> </Employee> <Status>1</Status> </Employees>

Cualquier ayuda es apreciada.


Esta es una vieja pregunta, pero dado que me encontré con lo mismo justo ahora, publicaré mi solución.

Necesitaba tener un servicio de proxy devolver un mensaje XML sin el sobre envolvente. Intenté usar application/xml y text/xml ( org.apache.axis2.transport.http.ApplicationXMLFormatter y org.wso2.carbon.relay.ExpandingMessageFormatter respectivamente) tipos de contenido en vano. Ninguno de estos tipos de contenido devolvió el mensaje con la declaración XML.

La solución es escribir un formateador de mensaje personalizado. Aquí está mi implementación que se comporta como org.apache.axis2.transport.http.ApplicationXMLFormatter pero escribe correctamente la declaración XML en el mensaje.

package com.example.axis2.messageformatter; import java.io.IOException; import java.io.OutputStream; import org.apache.axiom.om.OMOutputFormat; import org.apache.axis2.AxisFault; import org.apache.axis2.context.MessageContext; import org.apache.axis2.transport.http.ApplicationXMLFormatter; public class CustomApplicationXmlFormatter extends ApplicationXMLFormatter { @Override public void writeTo(MessageContext context, OMOutputFormat format, OutputStream out, boolean preserve) throws AxisFault { String xmlHeader = "<?xml version=/"1.0/" encoding=/"" + format.getCharSetEncoding() + "/"?>"; try { out.write(xmlHeader.getBytes()); } catch (IOException e) { throw new AxisFault("Unable to write XML declaration to output stream.", e); } super.writeTo(context, format, out, preserve); } }

Puede colocar la clase en un archivo jar en <ESB_ROOT>/repository/components/lib . Además, debe consultar la clase desde la configuración de axis2 ( <ESB_ROOT>/repository/conf/axis2/axis2.xml ) agregando lo siguiente en la parte de formateadores de mensajes del archivo:

<messageFormatter contentType="application/xml" class="com.example.axis2.messageformatter.CustomApplicationXmlFormatter"/>