Java 使用ApacheCamel测试Localstack AWS
我正试图利用它进行本地AWS模拟测试。具体来说,我想使用ApacheCamel S3路由从localstack S3 bucket下载一个文件。然而,我遇到了错误。以下是我采取的步骤 我已经通过输入Java 使用ApacheCamel测试Localstack AWS,java,amazon-web-services,amazon-s3,apache-camel,localstack,Java,Amazon Web Services,Amazon S3,Apache Camel,Localstack,我正试图利用它进行本地AWS模拟测试。具体来说,我想使用ApacheCamel S3路由从localstack S3 bucket下载一个文件。然而,我遇到了错误。以下是我采取的步骤 我已经通过输入 aws --endpoint-url=http://localhost:4572 s3 mb s3://mytestbucket 然后,我上传了一个测试文件到这个桶 aws --endpoint-url=http://localhost:4572 s3 cp docker-compose.yml
aws --endpoint-url=http://localhost:4572 s3 mb s3://mytestbucket
然后,我上传了一个测试文件到这个桶
aws --endpoint-url=http://localhost:4572 s3 cp docker-compose.yml s3://mytestbucket
两个操作都成功完成。在我的Java代码中,我创建了一个CDI生产者来生成com.amazonaws.services.s3.AmazonS3客户机对象
AWSCredentials credentials = new BasicAWSCredentials("XXXXX", "XXXXX");
AWSCredentialsProvider credentialsProvider = new AWSStaticCredentialsProvider(credentials);
AmazonS3ClientBuilder clientBuilder = AmazonS3ClientBuilder.standard()
.withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration("http://localhost:4572", "us-east-1"))
.withCredentials(credentialsProvider);
AmazonS3 s3Client = clientBuilder.build();
最后,我创建了一个驼峰路由,用于将mytestbucket的内容下载到本地目录中
<route id="s3test">
<from
uri="aws-s3://arn:aws:s3:::mytestbucket?amazonS3Client=#s3Client&deleteAfterRead=false&maxMessagesPerPoll=25&delay=5000" />
<log message="S3 consumer fired" loggingLevel="DEBUG" />
<log message="Sending S3 file to ${in.header.CamelAwsS3Key}..." />
<to
uri="file://tmp/camel?fileName=${in.header.CamelAwsS3Key}" />
</route>
但是,当我的应用程序启动并尝试运行路由时,会出现以下异常:
原因:org.jboss.weld.exceptions.DeploymentException:未能
创建路由测试:
路线(s3test)[[From[aws-s3://arn:aws:s3:::mytestbucket?amazo…”。。。
由于无法在执行HTTP请求:mytestbucket.localhost
org.jboss.weld.bootstrap.events.AbstractDeploymentContainerEvent.fire(AbstractDeploymentContainerEvent.java:38)
在
org.jboss.weld.bootstrap.events.AfterDeploymentValidationImpl.fire(AfterDeploymentValidationImpl.java:28)
在
org.jboss.weld.bootstrap.WeldStartup.validateBeans(WeldStartup.java:499)
在
org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:93)
在org.jboss.as.weld.WeldStartService.start(WeldStartService.java:97)上
在
org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1736)
在
org.jboss.msc.service.ServiceControllerImpl$StartTask.execute(ServiceControllerImpl.java:1698)
…另外6个原因:org.apache.camel.FailedToCreateRouteException:
无法创建路由测试:
路线(s3test)[[From[aws-s3://arn:aws:s3:::mytestbucket?amazo…”。。。
由于无法在执行HTTP请求:mytestbucket.localhost
org.apache.camel.impl.RouteService.warmUp(RouteService.java:147)位于
org.apache.camel.impl.DefaultCamelContext.doWarmUpRoutes(DefaultCamelContext.java:3949)
在
org.apache.camel.impl.DefaultCamelContext.safelyStartRouteServices(DefaultCamelContext.java:3856)
在
org.apache.camel.impl.DefaultCamelContext.doStartOrResumeRoutes(DefaultCamelContext.java:3642)
在
org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:3494)
在
org.apache.camel.impl.DefaultCamelContext.access$000(DefaultCamelContext.java:209)
在
org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:3253)
在
org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:3249)
在
org.apache.camel.impl.DefaultCamelContext.doWithDefinedClassLoader(DefaultCamelContext.java:3272)
在
org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:3249)
在
org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
在
org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:3165)
在
org.apache.camel.impl.DefaultCamelContext$Proxy$\u$\ uWeldClientProxy.start(未知
来源)在
org.apache.camel.cdi.CdiCamelExtension.afterDeploymentValidation(CdiCamelExtension.java:425)
位于的sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
invoke(NativeMethodAccessorImpl.java:62)
在
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
位于java.lang.reflect.Method.invoke(Method.java:498)
org.jboss.weld.injection.StaticMethodInjectionPoint.invoke(StaticMethodInjectionPoint.java:95)
在
org.jboss.weld.injection.MethodInvocationStrategy$SpecialPalamPlusBeanManager策略.invoke(MethodInvocationStrategy.java:144)
在
org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:330)
在
org.jboss.weld.event.ExtensionObserverMethodImpl.sendEvent(ExtensionObserverMethodImpl.java:123)
在
org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:308)
在
org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:286)
位于org.jboss.weld.util.observators.notify(observators.java:172)
org.jboss.weld.event.ObserverNotifier.notifySyncObservers(ObserverNotifier.java:285)
在
org.jboss.weld.event.ObserverNotifier.notify(ObserverNotifier.java:273)
在
org.jboss.weld.event.ObserverNotifier.firevent(ObserverNotifier.java:177)
在
org.jboss.weld.event.ObserverNotifier.firevent(ObserverNotifier.java:171)
在
org.jboss.weld.bootstrap.events.AbstractContainerEvent.fire(AbstractContainerEvent.java:53)
在
org.jboss.weld.bootstrap.events.AbstractDeploymentContainerEvent.fire(AbstractDeploymentContainerEvent.java:35)
…另外12个原因:com.amazonaws.SdkClientException:无法
在以下位置执行HTTP请求:mytestbucket.localhost
amazonaws.http.AmazonHttpClient$RequestExecutor.handleRetryableException(AmazonHttpClient.java:1114)
在
amazonaws.http.AmazonHttpClient$RequestExecutor.executehelp(AmazonHttpClient.java:1064)
在
amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:743)
在
amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:717)
在
amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:699)
在
amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:667)
在
amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:649)
在
com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:513)
在
amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4330)
在
amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4277)
在
com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.jav
AWSCredentials credentials = new BasicAWSCredentials("XXXXX", "YYYYY");
AWSCredentialsProvider credentialsProvider = new AWSStaticCredentialsProvider(credentials);
AmazonS3ClientBuilder clientBuilder = AmazonS3ClientBuilder.standard().withPathStyleAccessEnabled(true)
.disableChunkedEncoding()
.withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(S3_ENDPOINT, "us-east-1"))
.withCredentials(credentialsProvider);