#file #mule
#файл #mule
Вопрос:
Я использую
<gzip-compress-transformer/>
<base64-encoder-transformer/>
после соединителя файлов, а затем напишите компонент для обработки содержимого gzip base64.
Как я могу получить имя файла в компоненте?
Ответ №1:
Обратите внимание, что мы ввели аннотации в Mule 3 для выполнения внедрения во время выполнения, это означает, что вы можете указать, как вызывать компонент без необходимости преобразования, т.е.
сохранение общедоступной пустоты (@Payload String FileContents, @InboundHeaders(«OriginalFileName») Строка OriginalFileName)
Комментарии:
1. Это отличный подход. К сожалению, в OP не указано, нормально или нет, чтобы его компонент поддерживал Mule или нет. Мое предложение использовать transformer было действительно на случай, если он хотел сохранить свой компонент без Мула, что, по-видимому, является еще одним преимуществом Mule (его способность работать с любым уже существующим объектом).
2. хороший момент, мы действительно должны разбить аннотации на их собственные jar, чтобы это была единственная зависимость. Может быть, даже это слишком много для некоторых
3. Или пойти по пути Spring: начните сначала с пользовательских аннотаций и всякий раз, когда может подойти стандартная, переключитесь на нее, поддерживающую как Mule-custom, так и стандартную.
Ответ №2:
Реализует ли ваш компонент Callable? Если нет, вы хотите, чтобы ваш компонент не знал о муле?
Основываясь на ваших ответах на эти вопросы, существуют разные варианты:
- С помощью Callable вы получаете заголовки в message.getProperty…
- Без реализации Callable вы можете получить доступ к RequestContext, чтобы получить текущее событие Mule и оттуда получить доступ к свойствам сообщения. Но это делает ваш компонент Mule осведомленным.
- В противном случае попросите метод вашего компонента принять второй параметр (String OriginalFileName ) и использовать стандартный преобразователь выражений для преобразования полезной нагрузки в массив, содержащий: #полезная нагрузка, #[заголовок:OriginalFileName]. Затем эти массивы будут переданы в качестве аргументов методу вашего компонента.
Комментарии:
1. Я могу получить имя файла, используя context.GetMessage().getOutboundProperty(«OriginalFileName»), но теперь мне нужна информация о каталоге, я установил для «recursive» значение true, могу ли я получить информацию о каталоге из заголовка или свойства? Или мне нужно установить для «autoDelete» значение false и получить доступ к java.io . Файловый объект?
2. Нет, транспорт не будет добавлять информацию о каталоге. Вы можете создать файловый объект из OriginalFileName .
Ответ №3:
[message.outboundproperties[OriginalFileName]]
с помощью этого выражения вы можете получить исходное имя файла в компоненте.