2017-02-28 3 views
0

Ich versuche Beispielprogramm mit Datei - Inbound-Channel-Adapter. Ich möchte nur die Datei mit Adapter lesen und sie an den Transformator übergeben, um sie in Map zu konvertieren und schließlich an Service Activator zu übergeben, um die Karte zu drucken.Spring Integration - File Inbound Channel Adapter

Wenn ich das Programm starte, erreicht es den Transformator vom Adapter, aber es erreicht den Service Activator überhaupt nicht.

Da ich hier den Inbound Channel Adapter verwendet habe, habe ich Gateway nicht als Einstiegspunkt verwendet. Ist das etwas falsch?

@Configuration 
public class SpringIntegrationAdapterConfig { 

static Logger log = Logger.getLogger(SpringIntegrationAdapterConfig.class); 

@Bean 
@InboundChannelAdapter(value = "fileInputChannel", poller = @Poller(fixedDelay = "1000")) 
public MessageSource<File> fileReadingMessageResource(){ 
    FileReadingMessageSource source = new FileReadingMessageSource(); 
    source.setDirectory(new File("C:\\Rajashree\\work\\test")); 
    source.setFilter(new SimplePatternFileListFilter("Sample.csv")); 

    log.info("Reading file using File Adapter"); 

    return source; 
} 
} 

@Component 
public class FileService { 

static Logger log = Logger.getLogger(FileService.class); 

@Transformer(inputChannel = "fileInputChannel", outputChannel = "mappingChannel") 
public List<Map<String, String>> readFile(File file){ 
    log.info(file.getName()); 

    List<Map<String, String>> dataList = new ArrayList<>(); 
    CSVFormat csvFormat = CSVFormat.DEFAULT.withHeader(); 

    try(CSVParser parser = new CSVParser(new FileReader(file), csvFormat)){ 
     parser.getRecords().stream().map(e -> dataList.add(e.toMap())).collect(Collectors.toList()); 
     log.info(dataList); 

    } catch (IOException e) { 
     log.error("File read Error : " + e); 
    } 

    return dataList; 
    } 
} 


@Component 
public class MappingTransformer { 

    @Transformer(inputChannel = "mappingChannel", outputChannel = "printChannel") 
    public List<Map<String, String>> mapFields(List<Map<String, String>> dataList){ 
     System.out.println("File mapped :: " + dataList); 
     return dataList; 
    } 
} 

    @MessageEndpoint 
    public class printService{ 

    @ServiceActivator(inputChannel="printChannel", outputChannel= "outputChannel") 
    public void print(List<Map<String, String>> dataList){ 
     System.out.println("Message Printed"); 
    } 
    } 

Antwort

0

Ich denke, es gibt etwas Interessantes in den Protokollen. Es sieht so aus, als ob Ihr Transformator einen Fehler ausgibt. Deshalb können Sie die nächste Komponente nicht erreichen.

Zusätzlich können Sie DEBUG für die Kategorie org.springframework.integration einschalten und Protokolle untersuchen, wie Ihre Nachrichten reisen.

+0

Transformator funktioniert gut. Ich habe die Datei mit der normalen Methode geladen und Transformer über Gateway aufgerufen. Der ganze Ablauf funktioniert gut. Aber ich wollte die Datei mit dem Dateiadapter laden und es funktioniert nicht. –

+0

Ihr "aber" sollte bitte mit Logs und Stack Status bestätigt werden. –

+0

Lass mich das herausfinden ... Danke –

Verwandte Themen