2013-10-04 5 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 전송을 사용해야합니다. 또한

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

당신이

+0

왜 웹 사이트에 게시하려면 VFS를 사용합니까? 위에 파일 정보가 있지만 목표가 아닙니다. 목표는 양식 데이터로 HTTP 게시물을 작성하는 것입니다. – user2836244

2

등록하지 않은 ESB 프록시 엔드 포인트에 직접 페이로드를 보내 SOAPUI 또는 SOAP 클라이언트를 사용할 수 있습니다 문제를 해결하기 위해 VFS 전송을 사용하는 방법에 대한 다음 예제를 참조하십시오 메시지 내용을 만드는 방법. 내가 찾은 최선의 방법은 payloadFactory입니다. 빌드해야하는 메시지에는 양식 필드 당 하나의 자식이있는 루트 XML 요소가 있고 Axis2가 messageTypeapplication/x-www-form-urlencoded으로 처리하는 것으로 보이는 메시지가 적절한 형식으로 serialize됩니다. 그래서 프록시에 대한 최소한의 변화는 다음과 같습니다 당신의 REST 서비스는 HTTP/1.1을 처리 여부도에 따라 <property name="FORCE_HTTP_1.0" value="true" scope="axis2" type="STRING"/>를 추가하는 것이 편리 할 수 ​​

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

.

매개 변수가 필요한 경우 XPath extensions을 사용하여 payloadFactory에 인수를 전달할 수 있습니다. 예 :

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