2012-02-15 16 views
3

で春を使用しながら:エラーRESTでの注入は、私はTomcat上でSpringとジャージーを使用してREST APIを実装しようとしているが、私はエラーを取得していますジャージー/ 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

私は心配になり一点があります:

を例外はジャージーなく、春から来ているが。あなた(私のような)がフィールドserviceImplMyResourseであることがSpringフレームワークによって設定されていることを期待するなら、これはおそらく問題です。ジャージーはそれを埋もれようとし、いくつかの構成の失敗で失敗します。

すぐに回避するには、@Injectの代わりに@Autowireというスプリングを使用します。

0

この例外の理由を確認します(コンソール上の例外が表示されている場所のすぐ上にあります)。私は、要求タイプに応答するように構成された複数のメソッドがあったときに、この例外が発生しました。 例:/ rest/getDataリクエストがmethod1とmethod2に移動する可能性があります。

関連する問題