MethodInvokingFactoryBean возвращает себя вместо желаемого объекта - PullRequest
0 голосов
/ 21 февраля 2020

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

Я натолкнулся на способ получить Region в клиенте в этом вопросе, где решение, похоже, работает для спрашивающего.

Bind aws sqs регион верблюд

1 Ответ

2 голосов
/ 21 февраля 2020

Сначала тег apache -camel здесь избыточен. Во-вторых, вы пропустили, что asker использует контекст 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, и он работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...