2017-12-19 19 views
1

S3에서 인바운드 채널 어댑터를 사용하여 S3에서 파일을 다운로드하려고합니다. 내가 실행하려고하면스프링 통합 S3 'beanName'이 비어 있어서는 안됩니다.

s3.xml: 
<int:chain input-channel="s3ReaderChannel" output-channel="uncompressPayloadChannel"> 
<int:service-activator ref="s3Bean" method="generateS3ObjectHash" /> 
<int-aws:s3-inbound-channel-adapter 
       bucket="${s3.bucket}" 
       session-factory="s3SessionFactory" 
       auto-create-local-directory="true" 
       auto-startup="false" 
       filename-pattern="*.gz" 
       local-directory="." 
       local-filename-generator-expression="#this" 
       temporary-file-suffix=".transffering" 
       remote-directory="/remote/mytransfers" 
       local-filter="acceptAllFilter"/> 
</int:chain> 

<bean id="s3SessionFactory" 
class="org.springframework.integration.aws.support.S3SessionFactory"/> 




aws-credentials.xml: 
<!-- Define global credentials for all the AWS clients --> 
<aws-context:context-credentials> 
<aws-context:instance-profile-credentials/> 
<aws-context:simple-credentials access-key="${aws.accesskey}" 
           secret-key="${aws.secretkey}"/> 
</aws-context:context-credentials> 

<!-- Define global region --> 
<aws-context:context-region region="${aws.region}"/> 

, 나는 점점 오전 : 스택 추적에서

Exception in thread "main"` 
`org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected 
exception parsing XML document from file`; nested exception is 
java.lang.IllegalArgumentException: 'beanName' must not be empty 
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:414) 
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:336) 
...30 more 
Caused by: java.lang.IllegalArgumentException: 'beanName' must not be empty 
at org.springframework.util.Assert.hasText(Assert.java:181) 
at org.springframework.beans.factory.config.RuntimeBeanReference.<init>(RuntimeBeanReference.java:58) 
at org.springframework.beans.factory.config.RuntimeBeanReference.<init>(RuntimeBeanReference.java:46) 
at org.springframework.beans.factory.support.BeanDefinitionBuilder.addPropertyReference(BeanDefinitionBuilder.java:226) 
at org.springframework.integration.config.xml.AbstractPollingInboundChannelAdapterParser.doParse(AbstractPollingInboundChannelAdapterParser.java:64) 
    ...20 more 
` 

, AbstractPollingInboundChannelAdapterParser.java:64가 outputChannel에 관한 것입니다, 내가이기 때문에 이해 해달라고 여기 내 설정이다 체인에.

무엇이 여기에 있습니까?

답변

0

오른쪽, 인바운드 채널 어댑터는 흐름의 시작이며 <chain>에서 선언 할 수 없습니다. 너 이상은 어떤 사람 <int:service-activator> 후에 선언하는 것처럼 혼란 스럽다.

<int-aws:s3-inbound-channel-adapter><chain> 외부로 이동해야하며이 흐름이 흐름의 시작이 될 것임을 명심하십시오.

나는 당신이 잘못된 길을 생각하게 만들지 모르지만, Reference Manual에서 더 많은 정보가 필요해 보입니다.

+0

Usecase : S3 버킷에 파일을 덤프하는 다른 서비스가 있습니다. 논리를 기반으로 필자는 필요한 파일을 파생 시켰고이 S3 버킷에서 가져 왔습니다. 그래서, 나는 그것을 내 서비스 액티베이터가 논리를 이끌어내는 사슬에 넣었습니다. – Preethi

+0

그 목적을 위해 대신에 를 사용해야합니다. 인바운드 채널 어댑터는 항상 플로우의 시작점입니다. 그것은 어떤 사건에도 반응 할 수 없습니다. 그것은 작업 스케줄러에 의해 폴링 중입니다. 예상대로 작동하지 않을 것입니다. 이 구성 요소에 대한 귀하의 관점을 재고해야합니다. –

+0

그걸 시도했지만 다운로드 작업을 위해 페이로드를 'java.io.File'유형으로 강제 설정합니다. 왜? – Preethi