寻找一些指导或指针,不一定是解决方案,但是我将在完成后发布解决方案。
使用正在调用外部服务的WSO2 ESB / Integrator。根据外部服务[1],他们将在HTTP响应中返回一个文件作为响应。我要的是这个文件;将二进制文件保存到磁盘并通过网页重定向发送给用户。
有人能指出我可以接受HTTP响应并创建文件的方向吗?我想我需要转换响应并使用VFS。
任何帮助将不胜感激。
[1]-https://support.webmerge.me/hc/en-us/articles/206526216-Webhook
答案 0 :(得分:0)
这很简单,第一步是在de axis2.xml配置文件中启用VFS的传输发送器(如果您还想读取文件,则启用接收器)。 这些行已经在那里,只需要取消注释即可。
<transportReceiver name="vfs" class="org.apache.synapse.transport.vfs.VFSTransportListener"/>
<transportSender name="vfs" class="org.apache.synapse.transport.vfs.VFSTransportSender"/>
接下来,您将需要将响应转换为想要写入文件的任何格式。例如,您可以使用xslt转换,有效负载介体或数据映射器介体。
之后,您可以简单地将有效负载发送到vfs端点。例如,这可以是本地文件位置,也可以是远程ftp位置。确保您具有在所述位置写入文件的正确特权。例如,如果您以WSO2用户身份运行esb,并想将文件写入/ opt / wso2 / fileexchange,请确保WSO2用户对该文件夹具有写权限。
然后要写到该位置,只需使用发送介体,如下所示:
<property xmlns:ns2="http://org.apache.synapse/xsd" name="transport.vfs.ReplyFileName" value="myFile.txt" scope="transport"/>
<property name="OUT_ONLY" value="true"/>
<send>
<endpoint name="FileEpr">
<address uri="vfs:file:///opt/wso2/fileexchange"/>
</endpoint>
</send>
确保将transport.vfs.ReplyFileName属性设置为要写入的文件名。还有OUT_ONLY属性,因为文件系统不会向您发送很好的回复。
有关此主题的更多信息,您可以随时查看this blog
答案 1 :(得分:0)
我更喜欢发送引用文件的URI,而不是发送二进制数据。因此,更有效的方法是将文件上传到文件系统,然后使用String
(URI)进行传输。仅在需要读取文件数据时,然后从FileSystem下载它。而且,您应该确保FileSystem和最终用户之间的网络正常。