OSGI - 无法访问服务包中加载的应用程序资源

时间:2012-12-07 18:52:52

标签: spring-mvc osgi spring-dm

我正在使用OSGI和Spring MVC,详情如下

Bundle b1-将消息源声明为bean。消息资源在bundleb1中的服务中完全自动装配成功。 xml中的消息源条目是

<bean id="messageSource" class="org.synyx.messagesource.InitializableMessageSource">
<property name="basename" value="ApplicationResources"/>
<property name="messageProvider">
    <bean class="org.synyx.messagesource.jdbc.JdbcMessageProvider">
        <property name="dataSource" ref="dataSource"/>            
    </bean>
</property>
</bean>

消息源在bundle b1的osgi-context.xml中公开为服务,如下所示

 <osgi:service interface="org.springframework.context.MessageSource" ref="messageSource"/>

要导入WAB包中的消息资源,请在WAB的osgi-context.xml中进行以下输入,以便输入以下条目来导入由bundle b1公开的messageSource服务。

注意 - 我没有在WAB中创建messageSource bean(未在* -servlet.xml中定义messageSource),因为我希望从Bundle B1导入messageSource并由spring用于lang解析。

问题是 - 当我点击放置在WAB中的样本Jsp时 我收到错误

javax.servlet.ServletException: javax.servlet.jsp.JspTagException: No message found under code 'user.nametext' for locale 'en_US'.

分析 - 进一步调试spring代码我发现webapplication上下文中使用的messagesource是DelegatingMessageSource类型。但是从bundle b1导入的messageSource公开了InitializableMessageSource类型的对象。 这意味着不会使用通过WAB的osgi-context.xml导入的messageSource初始化Web应用程序上下文。

PLS帮助......

1 个答案:

答案 0 :(得分:1)

在您的使用者捆绑包中,将以下内容添加到您的sping配置中:

<osgi:reference id="messageSource" interface="org.springframework.context.MessageSource" />

然后,您可以像使用本地bean一样注入messageSource-bean。