Java Spring getResourceBundle强制转换异常

Java Spring getResourceBundle强制转换异常,java,spring,Java,Spring,我正在使用ReloadableResourceBundleMessageSource,我想获取属性文件的所有密钥 public class ExposedResourceBundleMessageSource extends ReloadableResourceBundleMessageSource { public Set getKeys(String baseName) { ResourceBundle bundle = getResourceBundle(

我正在使用
ReloadableResourceBundleMessageSource
,我想获取属性文件的所有密钥

public class ExposedResourceBundleMessageSource extends
    ReloadableResourceBundleMessageSource {

    public Set getKeys(String baseName) {
        ResourceBundle bundle = getResourceBundle(baseName);
        return bundle.keySet();
    }
}
调用
getResourceBundle
时会引发异常:

java.util.PropertyResourceBundle cannot be cast to java.util.ListResourceBundle
java.lang.ClassCastException: java.util.PropertyResourceBundle cannot be cast to java.util.ListResourceBundle
at com.sun.org.apache.bcel.internal.util.SecuritySupport$7.run(SecuritySupport.java:170)
at com.sun.org.apache.bcel.internal.util.SecuritySupport$7.run(SecuritySupport.java:167)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.org.apache.bcel.internal.util.SecuritySupport.getResourceBundle(SecuritySupport.java:167)
at com.sun.org.apache.bcel.internal.util.SecuritySupport.getResourceBundle(SecuritySupport.java:154)
at com.test.configuration.ExposedResourceBundleMessageSource.getKeys(ExposedResourceBundleMessageSource.java:21)
at com.test.configuration.UserDetailsServiceImpl.reloadAccountsFromProperties(UserDetailsServiceImpl.java:92)
at com.test.configuration.UserDetailsServiceImpl.init(UserDetailsServiceImpl.java:56)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:365)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:310)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:133)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:408)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:207)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1214)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1054)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1019)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:566)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:349)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:776)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:861)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:369)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:313)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1185)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1174)
at com.test.Application.main(Application.java:20)
消息源定义:

<bean id="messageSource" class="....ras.configuration.ExposedResourceBundleMessageSource">
    <property name="basenames">
        <list>
            <value>classpath:test</value>
        </list>
    </property>
    <property name="cacheSeconds" value="10" />
</bean>
更新:我使用了方法getMergedProperties,而不是仍然抛出异常的getResourceBundle。实际解决方案:

public class ExposedResourceBundleMessageSource extends
    ReloadableResourceBundleMessageSource {

    public Properties getProperties() {
        this.clearCache();
        PropertiesHolder propertiesHolder = getMergedProperties(Locale.ENGLISH);
        return propertiesHolder.getProperties();
    }
}

你能告诉我们你的春季版本吗。。多加一点stacktrace可能会有帮助。当然,抱歉提供了一些信息。4.3.1.RELEASE抱歉,但是
getResourceBundle(String baseName)
不是spring的(至少没有spring上下文:4.3.1.RELEASE)…可能只是一个错误的导入语句:
import org.springframework.context.support.ReloadableResourceBundleMessageSource?我有相同的导入。我使用了getMergedProperties而不是getResourceBundle,它最终工作正常。不管怎样,谢谢你的帮助
public class ExposedResourceBundleMessageSource extends
    ReloadableResourceBundleMessageSource {

    public Properties getProperties() {
        this.clearCache();
        PropertiesHolder propertiesHolder = getMergedProperties(Locale.ENGLISH);
        return propertiesHolder.getProperties();
    }
}