2012-02-15 115 views
3

我试图用球衣与Spring在Tomcat实现REST API,但我得到的错误:错误而注射使用REST新泽西州/弹簧和Tomcat

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 

web.xml中:

<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> 

MyResourse.java

@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(); 
    } 
} 

startup.xml

<?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是一个接口,不能实例化。

我真的很感激,如果你能帮助我!

谢谢!

回答

1

有一点让我担心:

这个例外来自泽西岛,而不是春天。如果你(像我一样)期望Spring框架填充字段serviceImplMyResourse,那么这可能是问题所在。它接近泽西试图填充它,并失败,并出现一些配置失败。

快速解决方法是使用Springs @Autowire而不是@Inject

0

检查此异常的原因(在控制台上打印异常的位置的正上方)。当我配置了多个可响应请求类型的方法时,我得到了这个异常。 例如:/ rest/getData请求可能会转到method1和method2。