我正在尝试在Tomcat上使用Jersey和Spring实现REST API,但我收到了错误:
INFO: Root resource classes found: class com.abc.restrequest.MyClass
Feb 15, 2012 6:35:24 AM com.sun.jersey.api.core.ScanningResourceConfig init
INFO: No provider classes found.
Feb 15, 2012 6:35:24 AM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
INFO: Initiating Jersey application, version 'Jersey: 1.8 06/24/2011 12:17 PM'
Feb 15, 2012 6:35:24 AM com.sun.jersey.spi.inject.Errors processErrorMessages
SEVERE: The following errors and warnings have been detected with resource and/or provider classes:
SEVERE: The class com.abc.service.interface.IMyClassService is an interface and cannot be instantiated.
Feb 15, 2012 6:35:24 AM org.apache.catalina.core.ApplicationContext log
SEVERE: StandardWrapper.Throwable
com.sun.jersey.spi.inject.Errors$ErrorMessagesException
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/log4j.properties</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/startup.xml,classpath*:startup.xml</param-value>
</context-param>
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.abc.restrequest</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/service/*</url-pattern>
</servlet-mapping>
@Inject
private IMyClassService serviceImpl;
@Override
public void setServiceImpl(IMyClassService impl) {
serviceImpl = impl;
}
@Path("/mycall")
@POST
@Consumes ({MediaType.APPLICATION_JSON})
@Produces ({MediaType.APPLICATION_JSON})
public Response hellouser() throws ParseException {
try {
serviceImpl.callme();
return Response.noContent().build();
} catch (Exception e) {
return Response.status(500).entity(e.getLocalizedMessage()).build();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cxf="http://cxf.apache.org/core"
xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:context="http://www.springframework.org/schema/context"
xmlns:http-conf="http://cxf.apache.org/transports/http/configuration"
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/util http://www.springframework.org/schema/util/spring-util-3.0.xsd
http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
http://cxf.apache.org/transports/http/configuration http://cxf.apache.org/schemas/configuration/http-conf.xsd
">
<context:component-scan base-package="com.abc.restrequest" />
<context:annotation-config />
<bean id="myrestservice" scope="prototype" class="com.abc.service.implementation.MyClassServiceImpl">
</bean>
</beans>
MyClassServiceImpl实现IMyClassService
任何人都能告诉我为什么会收到错误吗? com.abc.service.interface.IMyClassService类是一个接口,无法实例化。
如果你能帮助我,我真的很感激!!
谢谢!
答案 0 :(得分:1)
有一点让我担心:
例外来自泽西岛,而不是春天。如果你(像我一样)期望Spring框架填充serviceImpl
的{{1}}字段,那么这可能就是问题所在。泽西岛试图填充它的接缝,并在配置失败时失败。
快速解决方法是使用Springs MyResourse
而不是@Autowire
。
答案 1 :(得分:0)
检查此异常的原因(正好在控制台上打印异常的位置)。当我配置了多个能够响应请求类型的方法时,我遇到了这个异常。 例如:/ rest / getData请求可能会转到method1和method2。