WSO2ESB concat输入文件名和系统日期

WSO2ESB concat输入文件名和系统日期,wso2,wso2esb,Wso2,Wso2esb,我要输入文件名,下面是代码 <?xml version="1.0" encoding="UTF-8"?> <proxy xmlns="http://ws.apache.org/ns/synapse" name="importclassroomcourse" transports="https,http,local" statistics="disable" trace="disable" startOnLoad="true"> <tar

我要输入文件名,下面是代码

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
   name="importclassroomcourse"
   transports="https,http,local"
   statistics="disable"
   trace="disable"
   startOnLoad="true">
<target>
  <inSequence>
     <log level="custom">
        <property name="transport.vfs.ReplyFileName"
                  expression="fn:concat(get-property('SYSTEM_DATE', 'yyMMddHHmmss'), '-', get-property('filename'), '.xml')"/>
     </log>
  </inSequence>
  <outSequence>
     <send/>
  </outSequence>
  <endpoint>
     <address uri="https://qa-abc.com/api/classroom/xyz"/>
  </endpoint>
  </target>
   <description/>
  </proxy>

由于缺少文件名,请指导我如何获取文件名。我已发送文件test.xlsx

我在您的中介中找不到任何属性“filename”的初始化:此属性不存在,因此在“concat”中使用时没有值

你说的“我已经发送了text.xlsx文件”是什么意思?您的代理使用http和本地传输,它不是VFS代理扫描目录以加载文件吗

您可以定义此属性:

<property name="transport.vfs.ReplyFileName"                  expression="fn:concat(get-property('SYSTEM_DATE', 'yyMMddHHmmss'), '-test.xml')"/>

但在此之后,您必须在插入序列中使用带有vfs端点的send来写入文件(在您的情况下,有一个https端点)


如果您的代理是VFS代理,您可以使用范围传输上的文件名来获取传入的文件名。

谢谢Jean Michel。“我已经发送了文件text.xlsx”?这意味着我从邮递员那里寄来了文件。实际上,我只想检查传入的文件扩展名。我通过http邮递员请求从邮递员处发送了扩展名为.xlsx的文件,如果ESB处的传入文件不是xlsx,那么我需要发送错误消息作为响应。我不认识邮递员,但您需要访问中介中的文件扩展名:邮递员如何在post请求中发送此信息?我猜是http头?使用tcpmon(查看ESB_HOME/bin/)验证post详细信息。在插入序列中,您可以使用get属性('transport','MyHttpHeader')来获取这样的头。我对代码进行了如下更改:但仍然无法获取名称控制台日志是INFO-LogMediator filereceivefrompostman=null,但ESB日志显示以下详细信息“内容处置:表单数据;name=“file”;filename=”test.xlsx“如何从内容处置中提取文件名:form data;name=“file”;filename=“test.xlsx使用get属性('transport','Content-Disposition')和适当的xpath函数:
<property name="transport.vfs.ReplyFileName"                  expression="fn:concat(get-property('SYSTEM_DATE', 'yyMMddHHmmss'), '-test.xml')"/>