WSO2 ESB HTTP POST с данными формы

У меня есть мыльный сервис, который я хочу развернуть и отправить сообщение на внешний сервер.

Я смог сделать это с помощью curl следующим образом:

curl  --data-urlencode "filename=data.txt" --data-urlencode "filedir=/home/myfile/in" 
      --data-urlencode "busproc=MyBP" --data-urlencode "serverip=192.168.1.4" 
      --data-urlencode"uid=myuserid" --data-urlencode "pwd=mypwd"
      http://somelocation.com:8833/webservice/inbound/here

Но я не могу заставить его работать правильно. Вот мой прокси-сервис:

<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="ExampleHTTPPostWithFormData"
       transports="http"
       statistics="disable"
       trace="disable"
       startOnLoad="true">
   <target>
      <inSequence>
         <log/>
         <property name="messageType"
                   value="application/x-www-form-urlencoded"
                   scope="axis2"
                   type="STRING"/>
         <property name="HTTP_METHOD" value="post" scope="axis2" type="STRING"/>
         <send>
            <endpoint>
               <address uri="http://somelocation.com:8833/webservice/inbound/here"
                        format="pox"/>
               <property name="uid" value="user"/>
               <property name="pwd" value="password"/>
               <property name="filedir" value="/home/myfile/in"/>
               <property name="busproc" value="myBP"/>
               <property name="serverip" value="192.168.1.4"/>
               <property name="filename" value="data.txt"/>
            </endpoint>
         </send>
         <log level="full"/>
      </inSequence>
   </target>
   <description/>
</proxy>

Конечная служба, кажется, видит, что я отправляю сообщения только по URL-адресу (но не по переданным свойствам данных).


person user2836244    schedule 04.10.2013    source источник


Ответы (2)


Свойства — это не способ создания содержимого сообщения. Я нашел лучший способ сделать это с помощью payloadFactory. Сообщение, которое вам нужно построить, имеет корневой элемент XML с одним дочерним элементом для каждого поля формы, а затем кажется, что Axis2 обрабатывает messageType из application/x-www-form-urlencoded путем сериализации в соответствующем формате. Таким образом, минимальное изменение вашего прокси будет следующим:

<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="ExampleHTTPPostWithFormData"
       transports="http"
       statistics="disable"
       trace="disable"
       startOnLoad="true">
   <target>
      <inSequence>
         <log/>
         <property name="messageType"
                   value="application/x-www-form-urlencoded"
                   scope="axis2"
                   type="STRING"/>
         <payloadFactory media-type="xml">
           <format>
             <params xmlns="">
               <uid>user</uid>
               <pwd>password</pwd>
               <filedir>/home/myfile/in</filedir>
               <busproc>myBP</busproc>
               <serverip>192.168.1.4</serverip>
               <filename>data.txt</filename>
             </params>
           </format>
         </payloadFactory>
         <send>
            <endpoint>
               <address uri="http://somelocation.com:8833/webservice/inbound/here"
                        format="rest"/>
            </endpoint>
         </send>
         <log level="full"/>
      </inSequence>
   </target>
   <description/>
</proxy>

Также может быть удобно добавить <property name="FORCE_HTTP_1.0" value="true" scope="axis2" type="STRING"/> в зависимости от того, поддерживает ли ваша служба REST HTTP/1.1.

Если вам нужны параметры, вы можете передать аргументы в payloadFactory, используя расширения XPath< /а>. Например.

         <payloadFactory media-type="xml">
           <format>
             <params xmlns="">
               <uid>user</uid>
               <pwd>password</pwd>
               <filedir>/home/myfile/in</filedir>
               <busproc>myBP</busproc>
               <serverip>192.168.1.4</serverip>
               <filename>$1</filename>
             </params>
           </format>
           <args>
             <arg evaluator="xml" expression="$ctx:filename"/>
           </args>
         </payloadFactory>
person Peter Taylor    schedule 11.08.2015

Если вы отправляете полезную нагрузку SOAP в файл, вам нужно будет использовать транспорт VFS. Пожалуйста, обратитесь к следующему примеру о том, как использовать транспорт VFS для решения вашей проблемы.

http://docs.wso2.org/pages/viewpage.action?pageId=26838852

В качестве альтернативы вы можете использовать SOAPUI или любой клиент SOAP для отправки полезной нагрузки непосредственно на конечную точку прокси-сервера ESB.

person Nadeesha    schedule 07.10.2013
comment
зачем мне использовать VFS для публикации на веб-сайте? Хотя вышеприведенное содержит информацию о файле, это не цель. Цель состоит в том, чтобы сделать сообщение HTTP с данными формы. - person user2836244; 07.10.2013