【问题标题】:mule requester collection is not returning file name in it's propertiesmule 请求者集合未在其属性中返回文件名
【发布时间】:2015-09-28 20:29:08
【问题描述】:

当我使用mulerequester:request 从 SFTP 端点获取文件时,文件名属于入站属性originalFileName。但是当我尝试使用mule-requester:request-collection 时,文件名没有属于入站属性originalFilename

你们能帮我使用mule-requester:request-collection 获取文件名吗?

【问题讨论】:

  • mule-requester:request-collection 有一些错误,你可以在这里找到它:-stackoverflow.com/questions/25834912/… ... 可能是一个错误 确保你没有遇到过mule-requester:request-collection 的任何此类错误
  • 嗨 Anibaran,我已经看到了这个列表中的所有错误,但似乎这个问题与任何错误都不对应。
  • 可能是也可能不是错误,我不确定.. 但是 mule mulerequester 之前遇到了 mule-requester:request-collection 的问题 .. 确保您没有遇到新错误
  • 还有一个问题,我们将遍历来自 mulerequester:request-collection 的 message 或 paylod?
  • 有效负载是包含实际数据的消息的一部分...消息具有其他不同的部分,如入站属性、出站属性等,它们类似于标头,有效负载就像您发送的实际数据跨度>

标签: mule mule-component


【解决方案1】:

我也遇到了丢失文件名的问题。我的初始流程如下

  <file:connector name="FormDefinitonFileConnector" autoDelete="true" streaming="false"
validateConnections="true" doc:name="File" fileAge="50" />
<flow name="migrateFromFilePath">
<mulerequester:request-collection resource="file:///C:/DEV" doc:name="Request a files from a location" />
<logger message="Message before foreach: #[message]" level="INFO" doc:name="Logger" />
<foreach doc:name="For Each" collection="#[payload]">
  <logger message="originalFilename: #[message.inboundProperties['originalFilename']]-#[server.dateTime]"
    level="INFO" doc:name="Logger" />
  <logger message="Message after foreach: #[message]" level="INFO" doc:name="Logger" />
  <file:outbound-endpoint path="C:/DEV/processed" responseTimeout="10000" doc:name="File" />
</foreach>

我认为正在发生的事情是,foreach 被配置为遍历有效负载的数组

<foreach doc:name="For Each" collection="#[payload]">

每个有效负载的内容不是 Mule 消息,而是我们已加载的文件集合。

INFO  2017-05-19 11:36:18,520 [[cf_migrator].api-
httpListenerConfig.worker.02] org.mule.api.processor.LoggerMessageProcessor: 
Message before foreach: 
org.mule.DefaultMessageCollection
{
id=fe1f27d0-3c7e-11e7-856a-54391dd0f207
payload=java.util.concurrent.CopyOnWriteArrayList
correlationId=<not set>    
correlationGroup=-1
correlationSeq=-1
encoding=UTF-8
exceptionPayload=<not set>

Message properties:
    INVOCATION scoped properties:
    _ApikitResponseTransformer_AcceptedHeaders=*/*
    _ApikitResponseTransformer_apikitRouterRequest=yes
    _ApikitResponseTransformer_contractMimeTypes=[]
    INBOUND scoped properties:
    OUTBOUND scoped properties:
    SESSION scoped properties:
    }
INFO  2017-05-19 11:36:18,569 [[cf_migrator].api-httpListenerConfig.worker.02] org.mule.api.processor.LoggerMessageProcessor: Setting originalFilename: null-2017-05-19T11:36:18.563+01:00
INFO  2017-05-19 11:36:18,570 [[cf_migrator].api-httpListenerConfig.worker.02] org.mule.api.processor.LoggerMessageProcessor: Message after foreach: 
org.mule.DefaultMuleMessage
{
  id=fe20d580-3c7e-11e7-856a-54391dd0f207
  payload=[B
  correlationId=fe1f27d0-3c7e-11e7-856a-54391dd0f207
  correlationGroup=2
  correlationSeq=1
  encoding=UTF-8
  exceptionPayload=<not set>

Message properties:
  INVOCATION scoped properties:
    _ApikitResponseTransformer_AcceptedHeaders=*/*
    _ApikitResponseTransformer_apikitRouterRequest=yes
    _ApikitResponseTransformer_contractMimeTypes=[]
    counter=1
    rootMessage=<<<MuleMessage>>>
  INBOUND scoped properties:
  OUTBOUND scoped properties:
    MULE_CORRELATION_GROUP_SIZE=2
    MULE_CORRELATION_ID=fe1f27d0-3c7e-11e7-856a-54391dd0f207
    MULE_CORRELATION_SEQUENCE=1
  SESSION scoped properties:
}

感谢这个答案 Use a splitter to retain filename

将 foreach 替换为拆分器,为每个处理的文件生成一条 Mule 消息

<file:connector name="FormDefinitonFileConnector" autoDelete="true" streaming="false"
validateConnections="true" doc:name="File" fileAge="50" />
<flow name="migrateFromFilePath">
    <mulerequester:request-collection resource="file:///C:/DEV" doc:name="Request a files from a location" />
    <logger message="Message before splitter: #[message]" level="INFO" doc:name="Logger" />
      <collection-splitter doc:name="Collection Splitter"/>
      <logger message="Setting originalFilename: #[message.inboundProperties['originalFilename']]-#[server.dateTime]"
    level="INFO" doc:name="Logger" />
      <logger message="Message after splitter: #[message]" level="INFO" doc:name="Logger" />
      <file:outbound-endpoint path="C:/DEV/processed" responseTimeout="10000" doc:name="File" />
</flow>

现在我们有一个 Mule 消息,其中包含文件名和文件内容作为有效负载

INFO  2017-05-19 11:50:07,240 [[cf_migrator].api-httpListenerConfig.worker.02] org.mule.api.processor.LoggerMessageProcessor:             
Message before splitter: 
org.mule.DefaultMessageCollection
{
  id=ec09b8b0-3c80-11e7-a8cf-54391dd0f207
  payload=java.util.concurrent.CopyOnWriteArrayList
  correlationId=<not set>
  correlationGroup=-1
  correlationSeq=-1
  encoding=UTF-8
  exceptionPayload=<not set>

Message properties:
  INVOCATION scoped properties:
    _ApikitResponseTransformer_AcceptedHeaders=*/*
    _ApikitResponseTransformer_apikitRouterRequest=yes
    _ApikitResponseTransformer_contractMimeTypes=[]
  INBOUND scoped properties:
  OUTBOUND scoped properties:
  SESSION scoped properties:
}
INFO  2017-05-19 11:50:07,286 [[cf_migrator].api-httpListenerConfig.worker.02] org.mule.api.processor.LoggerMessageProcessor: Setting originalFilename: collectionBetweenRowsFormDef.json-2017-05-19T11:50:07.281+01:00
INFO  2017-05-19 11:50:07,288 [[cf_migrator].api-httpListenerConfig.worker.02] org.mule.api.processor.LoggerMessageProcessor: Message after splitter: 
org.mule.DefaultMuleMessage
{
  id=ec0f5e00-3c80-11e7-a8cf-54391dd0f207
  payload=[B
  correlationId=ec09b8b0-3c80-11e7-a8cf-54391dd0f207
  correlationGroup=2
  correlationSeq=1
  encoding=UTF-8
  exceptionPayload=<not set>

Message properties:
  INVOCATION scoped properties:
    _ApikitResponseTransformer_AcceptedHeaders=*/*
    _ApikitResponseTransformer_apikitRouterRequest=yes
    _ApikitResponseTransformer_contractMimeTypes=[]
  INBOUND scoped properties:
    directory=C:\DEV
    fileSize=14696
    originalDirectory=C:\DEV
    originalFilename=file1.json
    timestamp=1495120341439
  OUTBOUND scoped properties:
    MULE_CORRELATION_GROUP_SIZE=2
    MULE_CORRELATION_ID=ec09b8b0-3c80-11e7-a8cf-54391dd0f207
    MULE_CORRELATION_SEQUENCE=1
  SESSION scoped properties:
}
INFO  2017-05-19 11:50:07,350 [[cf_migrator].api-httpListenerConfig.worker.02] org.mule.lifecycle.AbstractLifecycleManager: Initialising: 'FormDefinitonFileConnector.dispatcher.1900990765'. Object is: FileMessageDispatcher
INFO  2017-05-19 11:50:07,350 [[cf_migrator].api-httpListenerConfig.worker.02] org.mule.lifecycle.AbstractLifecycleManager: Starting: 'FormDefinitonFileConnector.dispatcher.1900990765'. Object is: FileMessageDispatcher
INFO  2017-05-19 11:50:07,354 [[cf_migrator].api-httpListenerConfig.worker.02] org.mule.transport.file.FileConnector: Writing file to: C:\DEV\processed\ec26b690-3c80-11e7-a8cf-54391dd0f207.dat
INFO  2017-05-19 11:50:07,357 [[cf_migrator].api-httpListenerConfig.worker.02] org.mule.api.processor.LoggerMessageProcessor:     Setting originalFilename: file1.json-2017-05-19T11:50:07.357+01:00
INFO  2017-05-19 11:50:07,357 [[cf_migrator].api-httpListenerConfig.worker.02] org.mule.api.processor.LoggerMessageProcessor:     Message after splitter: 
org.mule.DefaultMuleMessage
{
  id=ec0ffa40-3c80-11e7-a8cf-54391dd0f207
  payload=[B
  correlationId=ec09b8b0-3c80-11e7-a8cf-54391dd0f207
  correlationGroup=2
  correlationSeq=2
  encoding=UTF-8
  exceptionPayload=<not set>

Message properties:
  INVOCATION scoped properties:
    _ApikitResponseTransformer_AcceptedHeaders=*/*
    _ApikitResponseTransformer_apikitRouterRequest=yes
    _ApikitResponseTransformer_contractMimeTypes=[]
  INBOUND scoped properties:
    directory=C:\DEV
    fileSize=54143
    originalDirectory=C:\DEV
    originalFilename=file2.json
    timestamp=1495124035101
  OUTBOUND scoped properties:
    MULE_CORRELATION_GROUP_SIZE=2
    MULE_CORRELATION_ID=ec09b8b0-3c80-11e7-a8cf-54391dd0f207
    MULE_CORRELATION_SEQUENCE=2
  SESSION scoped properties:
}

【讨论】:

    【解决方案2】:

    正如您所提到的,mule-requester:request-collection 返回一个MuleMessageCollection,因此originalFilename 入站属性(以及所有其他属性)应该在该集合的每个MuleMessage 中。 我很确定您可以使用foreach 范围处理该集合。 HTH。

    【讨论】:

    • 感谢您的回答。实际上我正在使用 foreach 集合。因此它不是作为入站属性出现的。现在我正在使用 Foreach,我得到了它。
    • 我想了很长时间如何获取入站属性,并为每一个帮助谢谢
    【解决方案3】:

    mule-requester:request-collection 存在一些错误,
    你可以在这里找到它:-Mule requester is consuming all the messages from JMS queue ... 可能是一个错误
    使用mule-requester:request-collection 确保您没有遇到任何此类错误

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-17
      • 1970-01-01
      • 1970-01-01
      • 2019-08-06
      • 1970-01-01
      • 2011-02-07
      相关资源
      最近更新 更多