Pregunta

Tengo un proxy ESB-4.6.0 WSO2 que llama a otro proxy que llama a un servicio web.

Proxy1 --> Proxy2 --> Endpoint

Si llama directamente al segundo proxy a través de Soapui, la respuesta se devuelve e imprime correctamente, pero si llamo al primer proxy, se devuelve un cuerpo en blanco.

En el registro de ESB, la salida de la proxy1 se imprime antes de la salida del proxy2. Parece que el Mediador Enviar presente en la intención del Proxy1 está haciendo una llamada asíncrona al proxy2.
He intentado reemplazar el Mediador Enviar por el mediador de la llamada, pero el resultado es el mismo.
Seguir este tutorial, pero tampoco funcionó.

¿Cómo reenviar la respuesta para el proxy2 a la persona que llama? Por favor ayuda. ¡Me está matando!

editar

¿Problema resuelto! Estaba usando un puerto incorrecto para especificar el parámetro ServiceURL para el mediador de la llamada.

editar

La configuración actual de proxies:

proxy1 (llamando proxy 2 - Administración de la fuerza):

<proxy xmlns="http://ws.apache.org/ns/synapse" name="GetAppointmentSchedulePortalReqCS" transports="http https" startOnLoad="true" trace="disable">
    <target>
        <inSequence>
            <xslt key="conf:ManageWorkforce/xslt/GetAppointmentSchedulePortalReqCS_Request.xsl"/>
            <header name="Action" value="getAppointment"/>
            <send>
                <endpoint>
                    <address uri="https://localhost:9443/services/ManageWorkforce"/>
                </endpoint>
            </send>
        </inSequence>
        <outSequence>
            <xslt key="conf:ManageWorkforce/xslt/GetAppointmentSchedulePortalReqCS_Response.xsl"/>
            <send/>
        </outSequence>
        <faultSequence/>
    </target>
    <publishWSDL key="conf:ManageWorkforce/GetAppointmentSchedulePortalReqCS.wsdl" />
</proxy>

proxy 2 (llamando proxy3 -getappointmentpeopleprovcs):

<proxy xmlns="http://ws.apache.org/ns/synapse" name="ManageWorkforce" transports="https http" startOnLoad="true" trace="disable">
    <target>
        <inSequence>
            <switch source="get-property('Action')">
                <case regex="getAppointment">
                    <callout serviceURL="https://localhost:8243/services/GetAppointmentPeopleProvCS" action="getAppointment">
                        <source xmlns:s12="http://www.w3.org/2003/05/soap-envelope" xmlns:s11="http://schemas.xmlsoap.org/soap/envelope/" xpath="s11:Body/child::*[fn:position()=1] | s12:Body/child::*[fn:position()=1]"/>
                        <target xmlns:s12="http://www.w3.org/2003/05/soap-envelope" xmlns:s11="http://schemas.xmlsoap.org/soap/envelope/" xpath="s11:Body/child::*[fn:position()=1] | s12:Body/child::*[fn:position()=1]"/>
                    </callout>
                </case>
                <!-- another cases -->
                <default/>
            </switch>
            <property name="RESPONSE" value="true" scope="default" type="STRING"/>
            <header name="To" action="remove"/>
            <send/>
        </inSequence>
        <outSequence>
            <drop/>
        </outSequence>
        <faultSequence/>
    </target>
    <publishWSDL key="conf:ManageWorkforce/ManageWorkforce.wsdl"/>
    </publishWSDL>
</proxy>

Proxy 3 (llamando al servicio -getApLaptment):

<proxy xmlns="http://ws.apache.org/ns/synapse" name="GetAppointmentPeopleProvCS" transports="http https" serviceGroup="" startOnLoad="true" trace="disable">
    <target>
        <endpoint key="GetAppointment"/>
        <inSequence>
            <xslt key="conf:ManageWorkforce/xslt/GetAppointmentPeopleProvCS_Request.xsl"/>
        </inSequence>
        <outSequence>
            <xslt key="conf:ManageWorkforce/xslt/GetAppointmentPeopleProvCS_Response.xsl"/>
            <send/>
        </outSequence>
        <faultSequence/>
    </target>
</proxy>

Punto final final (servicio):

<endpoint xmlns="http://ws.apache.org/ns/synapse" name="GetAppointment">
    <address uri="http://10.13.6.75:9764/services/GetAppointment" />
</endpoint>

¿Fue útil?

Solución

Hay dos mediadores para invocar servicios web.Esos son mediador de la llamada y Llamar a MediIROR .El mediador de la llamada realiza una llamada de bloqueo y el mediador de llamadas realiza una llamada sin bloqueo.

Por lo tanto, debe usar el mediador de llamadas si considera sobre el rendimiento.Está disponible en ESB 4.8.0.

Hay dos Muestras Para estos en los documentos de Wiki.

Hay otro muestra para llamarMediador del blog de Dushan.Esto tiene mediadores más complejos, pero puedes probar.

Esta es solo una respuesta rápida.

Espero que esto ayude.

¡Gracias!

Otros consejos

Proxy1 espera la respuesta de Proxy2 Incluso usas el Mediador Enviar. La salida de la proxy1 no debe ejecutarse antes de la ejecución de la salida de proxy2.

Cambiar al Mediador de CallOut es No La solución ideal para esto. Creo que debería haber algo mal con la configuración de proxy.

Si puede publicar la configuración de proxy aquí, podríamos darle ayuda para resolver esto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top