WSO2 ESB HTTP POST con datos de formulario
synapse (2)
Las propiedades no son la forma de construir el contenido del mensaje. La mejor manera que he encontrado para hacerlo es con una payloadFactory
. El mensaje que debe compilar tiene un elemento raíz XML con un elemento secundario por campo de formulario, y luego parece que Axis2 maneja el messageType
de messageType
de application/x-www-form-urlencoded
serializando en el formato apropiado. Por lo tanto, un cambio mínimo en su proxy sería:
<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>
También puede ser conveniente agregar <property name="FORCE_HTTP_1.0" value="true" scope="axis2" type="STRING"/>
dependiendo de si su servicio REST maneja HTTP / 1.1.
Si necesita parámetros, puede pasar argumentos a la payloadFactory
, utilizando las extensiones XPath . P.ej
<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>
Tengo un servicio de jabón que quiero cambiar y publicar un mensaje en un servidor externo.
Pude hacer esto a través de curl así:
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
Pero no puedo hacer que funcione correctamente. Aquí está mi servicio proxy:
<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>
El servicio final parece solo verme publicar en la URL (pero no en las propiedades de datos pasados).
Si envía la carga útil SOAP en un archivo, deberá usar el transporte VFS. Consulte la siguiente muestra sobre cómo usar el transporte VFS para resolver su problema
http://docs.wso2.org/pages/viewpage.action?pageId=26838852
Alternativamente, puede usar SOAPUI o cualquier cliente SOAP para enviar la carga útil directamente al punto final proxy de ESB