我有一个JAX应用程序,它使用spring来设置上下文。
我设立了一个AppConfig来处理这件事.就像这样。
@Configuration
@ComponentScan("com.whatever")
public class AppConfig {... //etc但是,我一直收到一个错误,因为应用程序正在寻找applicationContext.xml。
org.springframework.beans.factory.BeanDefinitionStoreException:
IOException parsing XML document from class path resource [applicationContext.xml];我想我得用我的web.xml文件做点什么.但我不太明白。这是我的web.xml
<web-app version="3.1" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_1.xsd">
<listener>
<listener-class>com.whatever.etc.ApplicationListener</listener-class>
</listener>
<!-- Application -->
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>
io.swagger.jaxrs.listing,
com.shutterstock.media.api
</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.provider.scanning.recursive</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.whatever.etc.MainClass</param-value>
</init-param>
<init-param>
<param-name>dirAllowed</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<!-- used to overwrite default 4xx state pages -->
<param-name>jersey.config.server.response.setStatusOverSendError</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<!-- Swagger -->
<servlet>
<servlet-name>Jersey Swagger</servlet-name>
<servlet-class>io.swagger.jersey.config.JerseyJaxrsConfig</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
</web-app>发布于 2017-05-01 14:04:53
您将得到错误,因为泽西与Spring集成的默认方法是查找这个applicationContext.xml文件。如果您想要减少xml,需要使用WebApplicationInitializer以编程方式配置Spring
@Order(1)
public class SpringWebContainerInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
registerContextLoaderListener(servletContext);
// Set the Jersey used property so it won't load a ContextLoaderListener
// see bug report https://java.net/jira/browse/JERSEY-2038
servletContext.setInitParameter("contextConfigLocation", "");
}
private void registerContextLoaderListener(ServletContext servletContext) {
WebApplicationContext webContext;
webContext = createWebAplicationContext(SpringAnnotationConfig.class);
servletContext.addListener(new ContextLoaderListener(webContext));
}
public WebApplicationContext createWebAplicationContext(Class... configClasses) {
AnnotationConfigWebApplicationContext context;
context = new AnnotationConfigWebApplicationContext();
context.register(configClasses);
return context;
}
}在本例中,您可以看到
createWebAplicationContext(SpringAnnotationConfig.class)只需在那里使用你的AppConfig。
我们在这里要做的是自己加载Spring上下文,而当泽西查找它时,它会找到它,而不是尝试加载上下文本身(否则它会试图查找applicationContext.xml文件)。
还请参见:
https://stackoverflow.com/questions/43718807
复制相似问题