Невозможно преобразовать [... ReloadableResourceBundleMessageSource] в требуемый тип [... ResourceBundleMessageSource]

Итак, я стараюсь делать свой проект с интернализацией. я делаю

  • Сообщения
  • Messages_en
  • Messages_fr

Если я помещу их в свой / resources /, все будет нормально работать с ResourceBundleMessageSource в моем контексте. Но я хочу изменить папку, например, на C: \ Apache \ servicemix \ etc \ conf \ messages.

И когда я сделал что-то подобное

Servicemix пишет

ResourceBundle [file:C:/Apache/servicemix/etc/conf/messages/Messages] not found for MessageSource: Can't find bundle for base name file:C:/Apache/servicemix/etc/confi/messages/Messages, locale en

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

    ReloadableResourceBundleMessageSource messageSource=new ReloadableResourceBundleMessageSource();
    messageSource.setBasename("file:C:/Apache/servicemix/etc/configurator/messages/Messages");
    messageSource.getMessage("next",null,new Locale("en"));

Я понимаю, что мне нужно. Я хочу использовать это в своем контексте. Но привести к ошибке:

Caused by: java.lang.IllegalStateException: Cannot convert value of type [org.springframework.context.support.ReloadableResourceBundleMessageSource] to required type [org.springframework.context.support.ResourceBundleMessageSource] for property 'messageSource': no matching editors or conversion strategy found
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:267)
at org.springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrapperImpl.java:449)
... 140 more

Почему не работает? Я использую чистый Spring, а не SpringBoot

Вы программируете против ResourceBundleMessageSource как типа (где-то поля) вместо MessageSource (интерфейса, который вы должны использовать вместо конкретного типа).

M. Deinum 16.01.2019 19:38

@ M.Deinum, спасибо. Вы были правы. У меня был 1 ResourceBundleMessageSource для MessageSource в одном из моих контекстов. Как выбрать свой комментарий в качестве ответа? ;-)

Dred 17.01.2019 06:22
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
189
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Сообщение об ошибке, которое вы получаете, связано с тем, что где-то в вашей кодовой базе вы используете ResourceBundleMessageSource как тип. Вероятно, в классе, у которого есть поле этого типа.

Вместо использования конкретного типа ResourceBundleMessageSource вы должны использовать вместо него общий интерфейс MessageSource. Таким образом, не имеет значения, какую реализацию вы выберете.

Спасибо за помощь)

Dred 17.01.2019 11:26

Другие вопросы по теме