2017-12-07 4 views
1

편집 됨 저는 Spring 통합에 익숙하지 않으며 서비스 액티베이터 (핸들 메소드를 통해)의 데이터를 채널로 전달하려고합니다..handle()을 통해 서비스 액티베이터의 출력 채널을 구성하십시오.

@Bean 
public IntegrationFlow processFileFlow() { 
    return IntegrationFlows 
      .from("fileInputChannel") 
      .transform(fileToStringTransformer()) 
      .handle("fileProcessor", "process") 
      .channel("xmlChannel") 
      .get(); 
} 

@Bean 
public DirectChannel fileInputChannel(){ 
    return new DirectChannel(); 
} 

@Bean 
public DirectChannel xmlChannel(){ 
    return new DirectChannel(); 
} 

@Bean 
public FileProcessor fileProcessor() { 
    return new FileProcessor(); 
} 

@Bean 
public IntegrationFlow enrichDataFlow() { 
    return IntegrationFlows 
      .from("xmlChannel") 
      .handle("enricher", "enrichProduct") 
      .channel("bvChannel") 
      .get(); 
} 

@Bean 
public Enricher enricher() { 
    return new Enricher(); 
} 

이것은 FileProcessor 클래스에게 있습니다

public class FileProcessor { 

    @ServiceActivator(outputChannel = "xmlChannel") 
    public String process(Message<String> msg) { 
     String content = msg.getPayload(); 
     return content; 
    } 
} 

이것은 Enricher 클래스 :

가 메시지 "제품을 풍요롭게이 .."인쇄 점점되지

public void enrichProduct(Message<String> msg) { 
     System.out.println("Enriching product " + msg); 
    } 
} 
공용 클래스 Enricher { , 나는 잘못 된 것을 정말로 확신하지 못합니다.

답변

0

아니요 .channel("xmlChannel")은 (는) 당신을 위해 적합합니까?

메시지 채널을 통해 한 끝점에서 다른 끝점으로 구성하는 것은 확실히 IntegrationFlow을 작성하는 올바른 방법입니다.

그리고 나는 @ServiceActivatoroutputChannel = "xmlChannel"inputChannel가 없기 때문에 그냥 작동하지 않을 것을 말할 것입니다. .handle() 이상은 모든 속성을 무시하고 fileProcessor.process() 메소드를 직접 처리합니다.

+0

고마워요. 같은 파일에 다른 통합 흐름이 정의되어 있기 때문에 .channel ("xmlChannel")이 작동하지 않는다고 추리합니다. 그에 따라 질문의 세부 사항을 수정하겠습니다. –

+0

어쨌든'fileOrocessor'가 호출 되었습니까? 'org.springframework.integration' 카테고리에 대한 디버그 로깅을 켜면 메시지가 플로우를 어떻게 여행하는지 볼 수 있습니다 –