Я пытаюсь использовать 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>
Похоже, что это должно работать, когда первый компонент создает регион, а второй компонент использует его.
Однако я получаю сообщение об ошибке, из-за которого создается впечатление, что MethodInvokingFactoryBean просто возвращает экземпляр самого себя вместо региона.
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, должен возвращать регион https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/regions/RegionUtils.html#getRegion-java.lang.String-
Я столкнулся с этим способом получения региона в клиенте в этом вопросе, где решение, похоже, сработало для спрашивающего.