Reputation: 3982
I want to set the file name in the header of the Message. So I placed the header enricher:
<int:header-enricher input-channel="singleFile" output-channel="fileNameAddedToHeader">
<int:header name="file-name" ref="fileNameHeaderEnricher" method="enrichHeader"/>
</int:header-enricher>
The enricher method is:
public Message<File> enrichHeader(Message<File> fileMessage) {
File file = (File) fileMessage.getPayload();
Message<File> messageOut =
MessageBuilder.withPayload(fileMessage.getPayload()).copyHeadersIfAbsent(fileMessage.getHeaders())
.setHeaderIfAbsent("file-name", file.getName()).build();
return messageOut;
}
But the header doesn't seem to be added properly.
.11:32:33.248 [task-scheduler-1] DEBUG o.s.i.channel.DirectChannel - postSend (sent=true) on channel 'fileNameAddedToHeader', message: GenericMessage [payload=/home/cost1.txt, headers={timestamp=1418363253171, id=d119e90e-938c-89c3-803e-e980da3de2db, correlationId=d2d5bf51-0647-12db-916d-98884943c08b, file-name=GenericMessage [payload=/home/cost1.txt, headers={timestamp=1418363253170, id=2374031d-4cc8-43bc-f15a-8061c28bec51, correlationId=d2d5bf51-0647-12db-916d-98884943c08b, file-name=costcenter1.txt, sequenceSize=1, sequenceNumber=1}], sequenceSize=1, sequenceNumber=1}]
It seems that file-name
contains the header part instead of file name.
file-name=GenericMessage [payload=/home/cost1.txt, headers={timestamp=1418363253170, id=2374031d-4cc8-43bc-f15a-8061c28bec51, correlationId=d2d5bf51-0647-12db-916d-98884943c08b, file-name=costcenter1.txt, sequenceSize=1, sequenceNumber=1}]
I am expecting file-name=cost1.txt
in the header. What am I doing wrong on setting the header? And is this task possible with SpEL to add file-name to header?
Upvotes: 0
Views: 4293
Reputation: 121427
Yes, do that wrong way.
See:
<int:header name="file-name" ref="fileNameHeaderEnricher" method="enrichHeader"/>
It assumes that the result of that method will be populated to the file-name
header.
Since your enrichHeader
returns a Message
object, we exactly see that in the end.
The SpEL variant looks better for your case:
<int:header name="file-name" expression="payload.name"/>
Note, if you are going use it for a downstream <int-file:outbound-channel-adapter>
the header must be file_name
- FileHeaders
.
Upvotes: 1