2015-01-12 2 views
1

Я создаю по существу прокси-сервер RESTful через прокси-сервер для ресурса сервера служб данных WSO2.Send Mediator Игнорирует данные HTTP-запроса (отправляет только заголовки!)

Я хотел бы послать следующий запрос к ESB ...

PUT /crm/contacts/267 

... С данными ...

<contacts> 
<firstname>John</firstname> 
</contacts> 

... так что контакт 267 первыми имя обновляется.

Я использую посредник сценария, чтобы получить идентификатор контакта и добавить его в XML-запрос в потоке медиации InSequence (так как это необходимо для создания Data Services Server). Затем я пытаюсь отправить запрос на сервер служб данных с использованием конечной точки HTTP.

Вот моя конфигурация API в качестве справки:

<api xmlns="http://ws.apache.org/ns/synapse" name="CRM" context="/crm"> 
    <resource methods="PUT" uri-template="/contacts/{cid}"> 
     <inSequence> 
     <script language="js"><![CDATA[ var request= mc.getPayloadXML(); var id = mc.getProperty('uri.var.cid'); var child = <id>{id}</id>; request.appendChild(child);mc.setPayloadXML(request); ]]></script> 
     <property name="messageType" value="application/xml" scope="axis2"/> 
     <property name="REST_URL_POSTFIX" scope="axis2" action="remove"/> 
     <send> 
      <endpoint> 
       <http method="put" uri-template="http://requestb.in/1h6werc1" /> 
      </endpoint> 
     </send> 
     <log level="full" xmlns="http://ws.apache.org/ns/synapse"/> 
     </inSequence> 
     <outSequence> 
     <send/> 
     </outSequence> 
    </resource> 
</api> 

Примечания: что конечная точка, указанная здесь, не мой DSS конечной точки, это просто запрос бен я использую для проверки выхода из API.

Таким образом, основная проблема заключается в том, что когда я проверяю Request Bin, я получаю запрос, но нет тела запроса. Если я изменил URL-адрес бина запроса на конечную точку DSS, источник данных не будет обновлен. Я могу напрямую обновить источник данных, используя ресурс DSS, так что он работает нормально.

Если есть указатели, вы можете дать мне эту работу, которая была бы высоко оценена!

Спасибо,

Strainy

ответ

1

Я пробовал его в ESB 4.8.1 с использованием NIO HTTP транспорта.

Я использовал SOAP UI, чтобы послать запрос к этому API:

soapui conf

я использовал TCPMON Между ESB и моей конечной точки и здесь есть запрос, отправленный ESB:

PUT /MockJSP.jsp HTTP/1.1 
Content-Type: application/xml; charset=UTF-8 
Accept-Encoding: gzip,deflate 
Transfer-Encoding: chunked 
Host: 127.0.0.1:8087 
Connection: Keep-Alive 
User-Agent: Synapse-HttpComponents-NIO 

3e 
<contacts> 
<firstname>John</firstname> 
<id>267</id></contacts> 
0 

Данные XML отправлены, я не вижу никакой проблемы: попробуйте использовать tcpmon (см. ESB_HOME/bin) между вашим экземпляром ESB и вашим хостом «requestb.in»?

+0

Являются ли транспортные средства NIO действительными для HTTP и HTTPS?) Включены в стандартную комплектацию? Не знаете, как сказать, использую ли я его. – Strainy

+0

в стандарте, WSO2 ESB 4.8.1 использовать PassThrough транспорт. Чтобы включить NIO, переименуйте репозиторий/conf/axis2/axis2_nhttp.xml в репозиторий/conf/axis2/axis2.xml. Я просто хотел указать, что я использую NIO, но я не знаю, изменит ли это что-нибудь. –

+0

Спасибо, Jean-Michel. Переключен транспорт от PassThrough к NIO, теперь все работает нормально. Не могли бы вы рассказать мне что-нибудь (или направить мне какую-то информацию) о различии между транспортом? Какое влияние это может оказать на ESB? – Strainy