Add ResourceIdResolver support
I many cases we deal in application just with simple logical name for the target AWS entities, e.g. `myQueue`, `testBucket`. Actually they must be resolved into the physical resources against the current environment. E.g. the same S3 `testBucket` ca be fully different in different regions. The SQS queue must be resolved into the resources with the current `Stack` context.
This commit is contained in:
@@ -17,6 +17,10 @@
|
||||
<constructor-arg value="org.springframework.integration.aws.outbound.S3MessageHandler$UploadMetadataProvider"/>
|
||||
</bean>
|
||||
|
||||
<bean id="resourceIdResolver" class="org.mockito.Mockito" factory-method="mock">
|
||||
<constructor-arg value="org.springframework.cloud.aws.core.env.ResourceIdResolver" />
|
||||
</bean>
|
||||
|
||||
<int-aws:s3-outbound-channel-adapter s3="s3"
|
||||
auto-startup="false"
|
||||
channel="errorChannel"
|
||||
@@ -29,7 +33,8 @@
|
||||
destination-key-expression="'baz'"
|
||||
object-acl-expression="'qux'"
|
||||
progress-listener="s3ProgressListener"
|
||||
upload-metadata-provider="uploadMetadataProvider"/>
|
||||
upload-metadata-provider="uploadMetadataProvider"
|
||||
resource-id-resolver="resourceIdResolver" />
|
||||
|
||||
<bean id="transferManager" class="com.amazonaws.services.s3.transfer.TransferManager"/>
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@ import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.BeanFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.cloud.aws.core.env.ResourceIdResolver;
|
||||
import org.springframework.expression.Expression;
|
||||
import org.springframework.expression.spel.support.StandardEvaluationContext;
|
||||
import org.springframework.integration.aws.outbound.S3MessageHandler;
|
||||
@@ -78,6 +79,9 @@ public class S3MessageHandlerParserTests {
|
||||
@Autowired
|
||||
private S3MessageHandler.UploadMetadataProvider uploadMetadataProvider;
|
||||
|
||||
@Autowired
|
||||
private ResourceIdResolver resourceIdResolver;
|
||||
|
||||
@Autowired
|
||||
private BeanFactory beanFactory;
|
||||
|
||||
@@ -110,6 +114,8 @@ public class S3MessageHandlerParserTests {
|
||||
.isSameAs(this.progressListener);
|
||||
assertThat(TestUtils.getPropertyValue(this.s3OutboundChannelAdapterHandler, "uploadMetadataProvider"))
|
||||
.isSameAs(this.uploadMetadataProvider);
|
||||
assertThat(TestUtils.getPropertyValue(this.s3OutboundChannelAdapterHandler, "resourceIdResolver"))
|
||||
.isSameAs(this.resourceIdResolver);
|
||||
|
||||
assertThat(this.s3OutboundChannelAdapter.getPhase()).isEqualTo(100);
|
||||
assertThat(this.s3OutboundChannelAdapter.isAutoStartup()).isFalse();
|
||||
|
||||
@@ -11,7 +11,14 @@
|
||||
<constructor-arg value="com.amazonaws.services.sns.AmazonSNS"/>
|
||||
</bean>
|
||||
|
||||
<int-aws:sns-outbound-channel-adapter id="defaultAdapter" sns="amazonSns">
|
||||
<bean id="resourceIdResolver" class="org.mockito.Mockito" factory-method="mock">
|
||||
<constructor-arg value="org.springframework.cloud.aws.core.env.ResourceIdResolver" />
|
||||
</bean>
|
||||
|
||||
<int-aws:sns-outbound-channel-adapter
|
||||
id="defaultAdapter"
|
||||
sns="amazonSns"
|
||||
resource-id-resolver="resourceIdResolver">
|
||||
<int-aws:request-handler-advice-chain>
|
||||
<bean class="org.springframework.integration.handler.advice.RequestHandlerRetryAdvice"/>
|
||||
</int-aws:request-handler-advice-chain>
|
||||
@@ -27,6 +34,7 @@
|
||||
topic-arn="foo"
|
||||
subject="bar"
|
||||
body-expression="payload.toUpperCase()"
|
||||
resource-id-resolver="resourceIdResolver"
|
||||
auto-startup="false"
|
||||
phase="201"/>
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@ import org.junit.runner.RunWith;
|
||||
import org.springframework.aop.support.AopUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.cloud.aws.core.env.ResourceIdResolver;
|
||||
import org.springframework.expression.Expression;
|
||||
import org.springframework.integration.endpoint.AbstractEndpoint;
|
||||
import org.springframework.integration.handler.advice.RequestHandlerRetryAdvice;
|
||||
@@ -75,6 +76,9 @@ public class SnsOutboundChannelAdapterParserTests {
|
||||
@Qualifier("snsGateway.handler")
|
||||
private MessageHandler snsGatewayHandler;
|
||||
|
||||
@Autowired
|
||||
private ResourceIdResolver resourceIdResolver;
|
||||
|
||||
@Test
|
||||
public void testSnsOutboundChannelAdapterDefaultParser() throws Exception {
|
||||
Object handler = TestUtils.getPropertyValue(this.defaultAdapter, "handler");
|
||||
@@ -93,16 +97,20 @@ public class SnsOutboundChannelAdapterParserTests {
|
||||
assertThat(TestUtils.getPropertyValue(this.defaultAdapterHandler, "topicArnExpression")).isNull();
|
||||
assertThat(TestUtils.getPropertyValue(this.defaultAdapterHandler, "subjectExpression")).isNull();
|
||||
assertThat(TestUtils.getPropertyValue(this.defaultAdapterHandler, "bodyExpression")).isNull();
|
||||
assertThat(TestUtils.getPropertyValue(this.defaultAdapterHandler, "resourceIdResolver"))
|
||||
.isSameAs(this.resourceIdResolver);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSnsOutboundChannelAdapterParser() {
|
||||
public void testSnsOutboundGatewayParser() {
|
||||
assertThat(TestUtils.getPropertyValue(this.snsGateway, "inputChannel")).isSameAs(this.notificationChannel);
|
||||
assertThat(TestUtils.getPropertyValue(this.snsGateway, "handler")).isSameAs(this.snsGatewayHandler);
|
||||
assertThat(TestUtils.getPropertyValue(this.snsGateway, "autoStartup", Boolean.class)).isFalse();
|
||||
assertThat(TestUtils.getPropertyValue(this.snsGateway, "phase", Integer.class)).isEqualTo(201);
|
||||
assertThat(TestUtils.getPropertyValue(this.snsGatewayHandler, "produceReply", Boolean.class)).isTrue();
|
||||
assertThat(TestUtils.getPropertyValue(this.snsGatewayHandler, "outputChannel")).isSameAs(this.errorChannel);
|
||||
assertThat(TestUtils.getPropertyValue(this.snsGatewayHandler, "resourceIdResolver"))
|
||||
.isSameAs(this.resourceIdResolver);
|
||||
|
||||
assertThat(TestUtils.getPropertyValue(this.snsGatewayHandler, "amazonSns")).isSameAs(this.amazonSns);
|
||||
assertThat(TestUtils.getPropertyValue(this.snsGatewayHandler, "evaluationContext")).isNotNull();
|
||||
|
||||
@@ -167,7 +167,7 @@ public class SnsInboundChannelAdapterTests {
|
||||
}
|
||||
|
||||
@Bean
|
||||
public HttpRequestHandler sqsMessageDrivenChannelAdapter() {
|
||||
public HttpRequestHandler snsInboundChannelAdapter() {
|
||||
SnsInboundChannelAdapter adapter = new SnsInboundChannelAdapter(amazonSns(), "/mySampleTopic");
|
||||
adapter.setRequestChannel(inputChannel());
|
||||
adapter.setHandleNotificationStatus(true);
|
||||
|
||||
Reference in New Issue
Block a user