Spring ReloadableResourceBundleMessageSource bean无法找到外部属性

时间:2016-10-06 19:05:56

标签: spring javabeans cglib wicket-6 apache-servicemix

我尝试使用Mkyong's guide访问外部属性文件,但没有成功。

这是位于WEB-INF中的web-osgi-context.xml文件中的bean定义:

<bean id="messageSource"
    class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basenames">
    <list>
        <value>classpath:bundles/resource</value>
        <value>classpath:bundles/override</value>
        <value>file:c:/test/messages</value>
    </list>
    </property>
    <property name="cacheSeconds" value="10"/>      
</bean>

访问bean:

@SpringBean
private ReloadableResourceBundleMessageSource messageSource;

尝试提取这样的信息:

String name = messageSource.getMessage("customer.name",
        new Object[] { 28,"http://www.mkyong.com" }, Locale.US);

System.out.println("Customer name (English) : " + name);

我在C:/ test / messages和C:/ test文件夹中都有messages_en_US.properties文件。它们包含以下行:

customer.name=Test, age : {0}, URL : {1}

我的全部,我错过了什么?我得到的信息是:

org.springframework.context.NoSuchMessageException: No message found under code 'customer.name' for locale 'en_US'.
 at org.springframework.context.support.AbstractMessageSource.getMessage(AbstractMessageSource.java:155)
不过,我也试过内部属性,也没有成功。我在我的本地servicemix(6.1.1)中部署.war,我也使用wicket(6.24.0)和spring(3.2.14)。在本地运行mkyong的应用程序(不是Web应用程序)(不在我的本地servicemix上部署它)。

1 个答案:

答案 0 :(得分:1)

Sooo我有点发现了问题,得到了一个工作......

这不起作用:

public class tt extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
       TypeFaceUtil.overrideFont(getApplicationContext(),"SERIF","fonts/calibri.ttf");
    }
}

在代码中:

<bean id="messageSource"
    class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename">
        <value>classpath:messages</value>
    </property>
</bean>

通过在此源上运行getClass(),我得到了

@SpringBean
private ReloadableResourceBundleMessageSource messageSource;

但这有效:

class WICKET_org.springframework.context.support.ReloadableResourceBundleMessageSource$$EnhancerByCGLIB$$852b0c02

通过在此源上运行getClass(),我得到了

@Bean
public MessageSource messageSource() {
     ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
     messageSource.setBasename("classpath:messages");
     return messageSource;
}

Cglib增强器是否有可能在这里搞乱?我能用任何方式让第一个选项工作吗?