MethodInvokingFactoryBean返回自身而不是所需的对象

问题描述 投票:0回答:1

我正在尝试使用MethodInvokingFactoryBean获取com.amazonaws.regions.Region的实例以用于配置com.amazonaws.services.kinesis.AmazonKinesisClient。我正在使用Blueprint,Camel和Karaf进行此操作。

<bean id="awsRegion" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="targetClass" value="com.amazonaws.regions.RegionUtils"/>
    <property name="targetMethod" value="getRegion"/>
    <property name="arguments">
        <list>
            <value>EU-WEST-1</value>
        </list>
    </property>
</bean>

<bean id="kinesisClient" class="com.amazonaws.services.kinesis.AmazonKinesisClient">
    <property name="region" ref="awsRegion"/>
</bean>

这似乎应该工作,第一个bean创建一个Region,第二个bean使用它。

但是,我收到一个错误,使它看起来好像MethodInvokingFactoryBean只是返回其自身的实例而不是Region。

org.osgi.service.blueprint.container.ComponentDefinitionException: Error setting property: PropertyDescriptor <name: region, getter: null, setter: [class com.amazonaws.AmazonWebServiceClient.setRegion(class com.amazonaws.regions.Region)]
...
Caused by: java.lang.Exception: Unable to convert value org.springframework.beans.factory.config.MethodInvokingFactoryBean@2289c050 to type com.amazonaws.regions.Region

我在RegionUtils中调用的方法应该返回一个Regionhttps://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/regions/RegionUtils.html#getRegion-java.lang.String-

我想到了这种方法,可以在问题中使区域成为客户,在这种情况下解决方案似乎适用于问询者。

Bind aws sqs region camel

spring apache-camel spring-bean blueprint-osgi
1个回答
1
投票

首先,这里的apache-camel标签是多余的。第二,您错过了问问者使用的是Spring上下文,而您使用的是蓝图上下文。尝试这样的事情:

<bean id="awsRegion" class="com.amazonaws.regions.RegionUtils" factory-method="getRegion">
    <argument value="EU-WEST-1"/>
</bean>

<bean id="kinesisClient" class="com.amazonaws.services.kinesis.AmazonKinesisClient">
    <property name="region" ref="awsRegion"/>
</bean>

编辑:刚刚使用最新的aws-java-sdk测试了此示例,并且可以使用

© www.soinside.com 2019 - 2024. All rights reserved.