Mule чтение одного файла из пути classpath во время потока - программирование
Подтвердить что ты не робот

Mule чтение одного файла из пути classpath во время потока

Есть ли простой способ настроить поток для однократного чтения одного файла из пути к классам? Мне не нужно опроса для файла. Мне просто нужно прочитать известный файл и установить его содержимое в качестве полезной нагрузки сообщения.

4b9b3361

Ответ 1

Используйте процессор сообщений set-payload и выражение MEL:

<set-payload value="#[Thread.currentThread().getContextClassLoader().getResourceAsStream('my-file.abc')]" />

Ответ 2

По какой-то причине я не могу сделать решение, предложенное Дэвидом Доссотом, работать. Я был вдохновлен этим ответом и придумал другое решение

<spring:bean id="myResource" class="org.apache.commons.io.IOUtils" factory-method="toString">
    <spring:constructor-arg value="classpath:path/to/myResource.txt" type="java.io.InputStream"/>
</spring:bean>

а затем вы можете использовать set-loadload следующим образом

<set-payload value="#[app.registry.myResource]" doc:name="Set Payload"/>

что приведет к установке полезной нагрузки с содержимым файла в виде строки.

Этот метод имеет то преимущество, что содержимое файла ресурсов загружается только один раз в bean типа String. Поэтому, если ваш оператор set-payload выполняется часто, это может повысить производительность.

Ответ 3

Как и в Mule 3.4, используйте трансформатор синтаксического анализа

<parse-template location="my-resurce.txt" doc:name="Load resource as a String"/>

Это сделает вещи намного проще.

Возможно, вам нужно будет установить тип mime, но в зависимости от того, как вы собираетесь использовать шаблон.

Общие ошибки включают использование полного пути в трансформаторе, например, c:\users\myusers\mule\myfile.txt Это не будет хорошо компилироваться.

Вы также можете использовать выражение Mule в шаблоне синтаксического анализа и, например, Rich Text.

http://www.mulesoft.org/documentation/display/current/Parse+Template+Reference

Ответ 4

    <scripting:component doc:name="Get xls File">                                        
        <scripting:script engine="Groovy"><![CDATA[new File('C:/project/src/main/resources/account.xls').getText('UTF-8')]]></scripting:script>
    </scripting:component>

Ответ 5

<parse-template location="my-resurce.txt" doc:name="Load resource as a String"/>

Файл может отлично не содержать выражения MEL вообще, и в этом случае он фактически загружается как есть, и он становится полезной нагрузкой.

Ответ 6

Я пытаюсь передать трансформатор класса Java, чтобы вы могли использовать следующие

note: путь - это прямой пакет, содержащий нужный вам файл для чтения am сохранить путь внутри переменной mule, а затем прочитать файл содержимого и сохранить его значение в полезной нагрузке

.

public class PayloadFileReader extends AbstractMessageTransformer {
public Object transformMessage(MuleMessage message, String outputEncoding)
        throws TransformerException {

    String result = "";
    try {
        result = readFileTest(message.getInvocationProperty("path")
                .toString());
    } catch (Exception e) {
        e.printStackTrace();
    }
    message.setPayload(result);
    return message;
}


public String readFileTest(String path) throws FileNotFoundException,
        IOException, Exception {


    ClassLoader classLoader = getClass().getClassLoader();

"+classLoader.getResource("samples/v3/addVal-request.sample").getFile());

    File file = new File(classLoader.getResource(path).getFile());
    FileReader fileReader = new FileReader(file);
    BufferedReader bufferReader = null;
    StringBuilder stringBuffer = new StringBuilder();
    String line;
    try {
        bufferReader = new BufferedReader(fileReader);
        while ((line = bufferReader.readLine()) != null) {
            stringBuffer.append(line);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (bufferReader != null) {
            try {
                bufferReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    return stringBuffer.toString();
}

Ответ 7

Вы можете создать "Spring Bean", который пытается "импортировать" файл (предположим, файл Mile XML conefiguration). Пример кода ниже:

<spring:beans>
 <spring:import resource="classpath:sample-mule-integration.xml"/>
</spring:beans>

Или вы можете попробовать, поместив файл в заполнитель свойств ниже

<context:property-placeholder location="file:E:\NewMuleWorkSpace\springbeanproperties\src\main\resources\property.properties"/>

Или вы даже можете прочитать файл с помощью компонента Groovy с образцом кода:

 File file = new File("C://Users//schiraboina//Desktop//123.txt")
payload=file.getText()