2016-03-17 3 views
0

Я пытаюсь настроить с помощью конфигурации Spring XML объект java.land.Optional с использованием заводского метода Optional.of. Однако я все время получаю сообщение об ошибке. Я использую Spring 4 и Java 8.Как настроить Java 8 java.util.Optional с использованием Spring 4 xml

<bean id="eventMapping" class="com.betfair.service.sogei.sem.dto.EventMapping"> 
    <constructor-arg name="sogTeam1Id" ref="sogTeam1Id"/> 
</bean> 

<bean id="sogTeam1Id" class="java.util.Optional" factory-method="of"> 
    <constructor-arg type="java.lang.Object" ref="team1Id"/> 
</bean> 

<bean id="team1Id" class="java.lang.Long"> 
    <constructor-arg value="1000"/> 
</bean> 

Когда я пытаюсь запустить тест, я получаю исключение при пружинном пытается создать бобы:

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'eventMapping' defined in class path resource [test-data-provider.xml]: Unsatisfied dependency expressed through constructor argument with index 0 of type [java.util.Optional]: Could not convert constructor argument value of type [java.lang.Long] to required type [java.util.Optional]: Failed to convert value of type [java.lang.Long] to required type [java.util.Optional]; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.Long] to required type [java.util.Optional]: no matching editors or conversion strategy found 

Я также пробовал:

<bean id="sogTeam1Id" class="java.util.Optional" factory-method="of"> 
    <constructor-arg type="java.lang.Object" value="1000"/> 
</bean> 

в этом случае я получаю следующее сообщение (подобное) сообщение об ошибке:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'updateEventDatePayload' defined in class path resource [test-data-provider.xml]: Cannot resolve reference to bean 'eventMapping' while setting constructor argument; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'eventMapping' defined in class path resource [test-data-provider.xml]: Unsatisfied dependency expressed through constructor argument with index 0 of type [java.util.Optional]: Could not convert constructor argument value of type [java.lang.String] to required type [java.util.Optional]: Failed to convert value of type [java.lang.String] to required type [java.util.Optional]; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [java.util.Optional]: no matching editors or conversion strategy found

Ошибки объяснить нет никакого способа, чтобы преобразовать объект Long на объект необязателен, но рассматриваемый метод заключается в следующем:

public static <T> Optional<T> of(T var0); 

Я хочу, чтобы иметь дополнительный объект, содержащий значение, которое является Long ,

Кто-нибудь сталкивался с этим раньше, пожалуйста, предложите некоторое понимание? Спасибо!

+0

Я давно перешел на JavaConfig, но я подозреваю, что проблема заключается в использовании 'constructor-arg' с чем-то, что не является конструктором. – chrylis

ответ

0

У вас возникли проблемы с настройкой компонента "eventMapping". Вы указали там ссылку на «team1Id» вместо «Team1Id». «team1Id» в вашей конфигурации имеет тип Long, поэтому он должен потерпеть неудачу. Только «Team1Id» имеет тип «Дополнительно». Поэтому вы должны использовать ссылку на этот компонент.

В общем, я бы посоветовал избегать использования бобов с почти одинаковыми для предотвращения таких столкновений.

+0

К сожалению, это была опечатка. Изменили его. – raghera

0

Так что в конце концов это было так, как я получил его, чтобы работать, если у кого-то такая же проблема. Через язык выражения Spring.

<constructor-arg name="eventMapping" value="#{ T(java.util.Optional).of(1)}"/>

не мог заставить его работать, используя заводскую-метод = «из» стратегии.

Это проще сделать с конфигурацией Java, как указано выше, но в этом случае мне пришлось использовать xml config.

Надеюсь, что это поможет!

Смежные вопросы