gpt4 book ai didi

java - MessageSource bean 在自定义异常映射器类中注入(inject) null

转载 作者:行者123 更新时间:2023-12-05 07:54:02 28 4
gpt4 key购买 nike

我试图理解为什么在下面的代码中将 messageSource bean 注入(inject) null :

@Provider
public class BadRequestExceptionMapper implements ExceptionMapper<BadRequestException>{
@Autowired
MessageSource messageSource;


@Override
public Response toResponse(BadRequestException ex) {
String message = null;
try{
message = messageSource.getMessage(ex.getErrorCode().getErrorKey(),null,null);

}catch(Exception e){
e.printStackTrace();
}
return Response.status(400).entity(message).type("text/plain")
.build();
}

}

下面是我的applicationContext.xml

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
<context:component-scan base-package="com.infonexis" />
<context:annotation-config />

<import resource="applicationPersistence.xml" />
<import resource="applicationService.xml" />
<import resource="applicationContext-datasource.xml" />

<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename">
<value>MessageResources_en_US</value>
</property>
<property name="cacheSeconds" value="1"/>
</bean>

</beans>

我正在尝试在自定义异常映射器类中 Autowiring MessageSource bean,但它被注入(inject) null,以前它在我从 ClassPathXmlApplicationContext 加载上下文时工作,如下所示:

@Provider
public class BadRequestExceptionMapper implements ExceptionMapper<BadRequestException>{

@Override
public Response toResponse(BadRequestException ex) {
String message = null;
try{
ApplicationContext context =
new ClassPathXmlApplicationContext("applicationContext.xml");
MessageSource messageSource =
(MessageSource)context.getBean("messageSource");

message = messageSource.getMessage(ex.getErrorCode().getErrorKey(),null,null);

}catch(Exception e){
e.printStackTrace();
}
return Response.status(400).entity(message).type("text/plain")
.build();
}

}

我尝试了以下内容

  1. 实现org.springframework.context.MessageSourceAware接口(interface)

  2. 在BadRequestExceptionMapper类中添加@Component注解

  3. 尝试注入(inject) ReloadableresourceBundleMessageSource 而不是使用接口(interface) MessageSource

但一切都失败了。

上下文组件扫描设置正确。如何正确注入(inject) MessageSource?

最佳答案

我认为你的@Provider 在你的 web.xml 中定义了一些上下文监听器,它可能在 spring 应用程序上下文监听器之前启动。

尝试将 Spring 监听器 org.springframework.web.context.ContextLoaderListener 放在 Web 服务监听器之前,例如 com.sun.xml.ws.transport.http.servlet.WSServletContextListener(或)您的任何 JAX-RS servlet喜欢 Jersey 的听众。

关于java - MessageSource bean 在自定义异常映射器类中注入(inject) null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31914628/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com