Ist es möglich, eine Implementierung eines Nachrichtensplitters zu haben, der eine Iterator
AND benutzerdefinierte Header-Informationen hinzufügen kann?Spring-Integration: Benutzerdefinierter Splitter mit Header-Anreicherung
Zum Beispiel, wenn ich die folgenden Klasse
public class CsvFileToIteratorSplitter extends AbstractMessageSplitter {
@Override
protected Object splitMessage(Message<?> message) {
Object payload = message.getPayload();
Assert.isInstanceOf(File.class, payload, "Expected java.io.File in the message payload");
try {
InputStream source = new FileInputStream((File) payload);
BufferedReader reader = new BufferedReader(new InputStreamReader(source));
String header = reader.lines().findFirst().orElse(null);
return MessageBuilder.withPayload(reader.lines().iterator())
.setHeaderIfAbsent("HEADER", header)
.build();
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
}
Dann kann ich zu dem Header hinzufügen, aber die Nutzlast ist eigentlich eine Instanz von Iterator
und die Spaltung nicht
Wenn ich so ändern, dass die Klasse habe ist jetzt
public class CsvFileToIteratorSplitter extends AbstractMessageSplitter {
@Override
protected Object splitMessage(Message<?> message) {
log.debug("{}", message.toString());
Object payload = message.getPayload();
Assert.isInstanceOf(File.class, payload, "Expected java.io.File in the message payload");
try {
InputStream source = new FileInputStream((File) payload);
BufferedReader reader = new BufferedReader(new InputStreamReader(source));
return reader.lines().iterator();
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
}
Die Aufteilung funktioniert, aber ich verliere die Header-Info.
Gibt es eine Möglichkeit, eine funktionierende Aufteilung mit der Möglichkeit, die Kopfzeile hinzuzufügen?
Danke. Funktioniert gut – Pram