Неправилен отговор - извикване на една ESB REST услуга от друга

Аз съм сравнително нов в WSO2 ESB, опитвам се да извикам REST уеб услуга с GET параметър, който се хоства на WSO2 ESB чрез друг REST API.

Това е проста уеб услуга (SampleREST), която отговаря с приветстващо съобщение в XML формат, когато извиквам тази услуга директно; мога да видя правилния отговор в браузъра, показан по-долу

<Message xmlns="http://ws.apache.org/ns/synapse">WelcomeRanjan</Message>

Сега създадох друга REST уеб услуга (InvokeSampleRest), която на свой ред извиква SampleREST уеб услуга с параметризирания GET, Invoke WebService Client ми връща XML отговора, обвит в xml тага на посредника, и други неправилно формирани етикети, показани по-долу

<mediate><<Message xmlns>"http://ws.apache.org/ns/synapse">WelcomeRanjan&lt;/Message></<Message xmlns></mediate>

Ето моят код за SampleREST API

<?xml version="1.0" encoding="UTF-8"?>
<api xmlns="http://ws.apache.org/ns/synapse" name="SampleREST" context="/SampleRest" hostname="10.203.245.47">
    <resource methods="GET" uri-template="/{str1}">
        <inSequence>
            <header name="To" action="remove"/>
            <property name="RESPONSE" value="true" scope="default" type="STRING"/>
            <property name="NO_ENTITY_BODY" scope="axis2" action="remove"/>
            <payloadFactory>
                <format>
                    <Message>$1</Message>
                </format>
                <args>
                    <arg expression="get-property('uri.var.str1')"/>
                </args>
            </payloadFactory>
            <log level="full" separator=",">
                <property name="sequence" value="*** Got Request ***"/>
            </log>
            <send/>
        </inSequence>
        <outSequence/>
        <faultSequence/>
    </resource>
</api>

Кодът за кода InvokeSampleREST е както е показано по-долу (обаждам се на услугата SampleREST оттук)

<?xml version="1.0" encoding="UTF-8"?>
<api xmlns="http://ws.apache.org/ns/synapse" name="InvokeSampleREST" context="/InvokeSampleREST" hostname="10.203.245.47">
       <resource methods="GET" uri-template="/{str1}">
        <inSequence>
            <log level="full" separator=","/>
            <property name="REST_URL_POSTFIX" expression="fn:concat('/Welcome',get-property('uri.var.str1'))" scope="axis2" type="STRING"/>
            <log level="full">
                <property name="sequence" value="****Message Sent *** "/>
            </log>
            <send>
                <endpoint>
                    <address uri="http://10.203.245.47:8280/SampleRest/"/>
                </endpoint>
            </send>
        </inSequence>
        <outSequence>
            <log level="full" separator=",">
                <property name="out" value="** Ouput of Rest call ***"/>
            </log>
            <property name="ContentType" value="application/xml" scope="axis2" type="STRING"/>
            <send/>
        </outSequence>
        <faultSequence/>
    </resource>
</api>

Оценявам всяка помощ. Благодаря, Ранджан


person Ranjan    schedule 24.05.2013    source източник


Отговори (2)


Защо използвате два API? Можете да проектирате своя поток в един API. Искам да кажа, че можете да ги обедините заедно. Между другото, трябва да зададете свойството contentType във вашия backend API (т.е.: В SampleREST API), защото, когато изпратите обратно отговора към "InvokeSampleREST" API, системата не знае типа на съдържанието на входящия отговор и не се опитва да го обработи като текстово съобщение.

Eg:

 <api name="SampleREST" context="/SampleRest" hostname="localhost">
      <resource methods="GET" uri-template="/{str1}">
         <inSequence>
            <header name="To" action="remove"/>
            <property name="NO_ENTITY_BODY" scope="axis2" action="remove"/>
            <property name="RESPONSE" value="true" scope="default" type="STRING"/>
            <payloadFactory>
               <format>
                  <Message>$1</Message>
               </format>
               <args>
                  <arg expression="get-property('uri.var.str1')"/>
               </args>
            </payloadFactory>
            <log level="full" separator=",">
               <property name="sequence" value="*** Got Request ***"/>
            </log>
            <property name="Content-Type"
                      value="application/xml"
                      scope="transport"
                      type="STRING"/>
            <send/>
         </inSequence>
         <faultSequence/>
      </resource>

person Ratha    schedule 27.05.2013

Опитайте да направите следната промяна в InvokeSampleREST API.

В outSequence задайте messageType както следва преди посредника ‹send›.

<property name="messageType" value="application/xml" scope="axis2"/>
person Isuru Udana    schedule 26.05.2013
comment
Здравей Isuru, опитах гореспоменатото свойство в кода, но все пак отговорът е същият. Можете ли да проверите дали работи за вас. - person Ranjan; 27.05.2013