2013-10-04 4 views
4

У меня есть служба мыла, которую я хочу обернуть и отправить сообщение на внешний сервер.WSO2 ESB HTTP POST с данными формы

я был в состоянии сделать это через завиток так:

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 (но не передается в свойствах данных).

ответ

0

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

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

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

+0

Почему я должен использовать VFS для публикации на веб-сайте? Хотя в приведенном выше файле содержится информация о файлах, это не цель. Цель состоит в том, чтобы сделать сообщение HTTP с данными формы. – user2836244

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 extensions. Например.

  <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> 
Смежные вопросы