Question

J'ai un proxy WSO2 ESB-4.6.0 qui appelle un autre proxy qui appelle un service Web.

Proxy1 --> Proxy2 --> Endpoint

Si j'appelle directement le deuxième proxy via SOPUI, la réponse est correctement renvoyée et imprimée, mais si j'appelle le premier proxy, un corps vide est retourné.

Dans le journal ESB, la victime de la proxy1 est imprimée avant la défense de la suite du proxy2. On dirait que le médiateur d'envoi présent dans la diversité du proxy1 fait un appel asynchrone au proxy2.
J'ai essayé de remplacer le médiateur d'envoi par le médiateur de call out, mais le résultat est le même. Comment suivre tutoriel, mais cela n'a pas aussi fonctionné.

Comment transférer la réponse pour le proxy2 à l'appelant?
S'il vous plaît aider. Ça me tue!

Modifier

problème résolu! J'utilisais un mauvais port pour spécifier le paramètre ServiceURL pour le médiateur de callout.

Modifier

La configuration des proxies en cours:

proxy1 (appel téléphonique 2 - ManageworkForce):

<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 (appelant 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 (appeler le service -GetAppointtissement):

<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>

Point final final (service):

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

Était-ce utile?

La solution

Il existe deux médiateurs pour invoquer des services Web.Ce sont médiateur de callout et Call Mediator .Le médiateur de callout effectue un appel de blocage et le médiateur d'appel effectue un appel non bloquant.

Donc, vous devez utiliser un médiateur d'appel si vous envisagez de la performance.Il est disponible dans ESB 4.8.0.

Il y a deux échantillons pour ceux-ci dans les documents Wiki.

Il y a une autre exemple pour appelerMédiateur du blog de Dushan.Cela a des médiateurs plus complexes, mais vous pouvez essayer.

Ceci est juste une réponse rapide.

J'espère que cela vous aidera.

merci!

Autres conseils

proxy1 attend la réponse de proxy2 Même si vous utilisez le médiateur d'envoi. Mreinquence du proxy1 ne doit pas être exécutée avant l'exécution de la défense de la recherche proxy2.

Switch to Callout Mediator est pas la solution idéale pour cela. Je pense qu'il devrait y avoir quelque chose qui ne va pas avec la configuration proxy.

Si vous pouvez poster la configuration proxy ici, nous pourrions peut-être vous aider à résoudre ce problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top