3

I'm trying to implement REST API using Jersey with Spring on Tomcat but I'm getting error:

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

Can any one tell me why I'm getting the error? The class com.abc.service.interface.IMyClassService is an interface and cannot be instantiated.

I'll really appreciate if you can help me out!!

Thanks!

2 Answers 2

1

There is one point that makes me worry:

The exception comes from Jersey, not Spring. If you (like me) expect that the field serviceImpl of MyResourse is populated by the Spring framework then this is likely the problem. It seams that Jersey attempts to populate it, and fails with some configuration failure.

A quick workaround would be using Springs @Autowire instead of @Inject.

Sign up to request clarification or add additional context in comments.

Comments

0

Check the reason for this exception( Right above where the exception is printed on console). I got this exception when I had multiple methods configured capable to respond to a request type. eg: /rest/getData request could possibly go to method1 and method2.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.