Bonjour, je suis débutant en java et j'essaye actuellement de mettre à jour le corps d'un message qui est transporté au sein d'une route camel (via talend).

Jusqu'ici tout va bien, j'arrive à modifier ce message. Cependant si le fichier est trop volumineux la JVM passe en out of memory.

Comment reconstruire le message en sachant que celui-ci doit être modifié, mais uniquement certaines lignes ?

Par exemple je dois changer la ligne A, mais garder les lignes B et C intactes, et ainsi reconstruire mon message.

En sachant que camel ne fournit pas de updateBody() par exemple et le setOut body me récree un nouveau message.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 
 
InputStream inputStream = exchange.getIn().getBody(InputStream.class);
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
 
 
String line = reader.readLine();
String columnToForceToZero = String.valueOf(exchange.getProperty("targetColumn"));
String lineToChange = String.valueOf(exchange.getProperty("targetLine"));
//String Separator = String.valueOf(exchange.getProperty("separator"));
List<String> listColumn = new ArrayList<String>(Arrays.asList(columnToForceToZero.split(",")));
 
int lengthLineToChange = lineToChange.length();
//String newBody = exchange.getIn().getBody(String.class);
String nouveauBody="";
 
 
while( line != null) { 
    if (lineToChange.equals(line.substring(0,lengthLineToChange))){
        List<String> list = new ArrayList<String>(Arrays.asList(line.split("\\|")));
        for (int i = 0; i < listColumn.size() ; i++) {
                list.set(Integer.parseInt(listColumn.get(i)), context.work_YODA_IN_value_to_force);
        }
 
        line = String.join("|", list);
 
    }
 
    nouveauBody = nouveauBody + line +"\n";
    line = reader.readLine();   
}
 
exchange.getOut().setBody(nouveauBody);
exchange.getOut().setHeaders(exchange.getIn().getHeaders());
//copy attachements from IN to OUT to propagate them
exchange.getOut().setAttachments(exchange.getIn().getAttachments());

Merci par avance