"No resource methods" when using JAX-RS on TomEE+

11,142

It looks like your resource methods are not public in scope. Try this:

import javax.ws.rs.*;
import javax.ws.rs.core.Response;
@Path("/test")
public class BaseResource {
  @GET @Produces("text/plain") @Path("test") public Response helloWorld() {
    return Response.ok("Hello world","plain/text").build();
  }
  @GET @Produces("text/plain") public String helloWorld2() {
    return "Hello world without path!";
  }
}
Share:
11,142
Nialscorva
Author by

Nialscorva

Tensor Wrench's platform accelerates the analyst's ability to produce high quality answers by integrating their application silos into a streamlined, secure workflow. We allow a single plugin to your web application to do the work of dozens, creating a reactive user interface that spans the many browser tabs of an analyst's tool box.

Updated on July 06, 2022

Comments

  • Nialscorva
    Nialscorva almost 2 years

    Using stock TomEE+, I cannot get a simple JAX-RS resource to work. I constantly get an error of:

    Jun 30, 2012 5:09:59 PM org.apache.cxf.jaxrs.utils.ResourceUtils checkMethodDispatcher
    WARNING: No resource methods have been found for resource class com.tensorwrench.test.BaseResource
    Jun 30, 2012 5:09:59 PM org.apache.cxf.jaxrs.utils.ResourceUtils checkMethodDispatcher
    WARNING: No resource methods have been found for resource class com.tensorwrench.test.BaseResource
    Jun 30, 2012 5:09:59 PM org.apache.cxf.jaxrs.utils.ResourceUtils checkMethodDispatcher
    WARNING: No resource methods have been found for resource class com.tensorwrench.test.BaseResource
    Jun 30, 2012 5:09:59 PM org.apache.cxf.jaxrs.AbstractJAXRSFactoryBean checkResources 
    SEVERE: No resource classes found
    Jun 30, 2012 5:09:59 PM org.apache.catalina.startup.HostConfig deployWAR
    SEVERE: Error deploying web application archive D:\workspace\api\src\main\catalina_base\webapps\testapi-1.0.war
    org.apache.cxf.service.factory.ServiceConstructionException
                    at org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:194)
                    at org.apache.openejb.server.cxf.rs.CxfRsHttpListener.deploy(CxfRsHttpListener.java:126)
                    at org.apache.openejb.server.cxf.rs.CxfRsHttpListener.deployPojo(CxfRsHttpListener.java:97)
                    at org.apache.openejb.server.rest.RESTService.deployPojo(RESTService.java:270)
                    at org.apache.openejb.server.rest.RESTService.afterApplicationCreated(RESTService.java:173)
                    at org.apache.tomee.webservices.TomeeJaxRsService.afterApplicationCreated(TomeeJaxRsService.java:55)
                    at org.apache.tomee.catalina.WebDeploymentListeners.afterApplicationCreated(WebDeploymentListeners.java:38)
                    at org.apache.tomee.catalina.TomcatWebAppBuilder.afterStart(TomcatWebAppBuilder.java:818)
                    at org.apache.tomee.catalina.GlobalListenerSupport.lifecycleEvent(GlobalListenerSupport.java:103)
                    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
                    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
                    at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:401)
                    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:168)
                    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:895)
                    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:871)
                    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:615)
                    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:962)
                    at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1603)
                    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
                    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
                    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
                    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
                    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
                    at java.lang.Thread.run(Thread.java:662)
    Caused by: javax.ws.rs.WebApplicationException
                    at org.apache.cxf.jaxrs.AbstractJAXRSFactoryBean.checkResources(AbstractJAXRSFactoryBean.java:312)
                    at org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:144)
                    ... 23 more
    

    Resource class: package com.tensorwrench.test;

    import javax.ws.rs.*;
    import javax.ws.rs.core.Response;
    @Path("/test")
    public class BaseResource {
      @GET @Produces("text/plain") @Path("test") Response helloWorld() {
        return Response.ok("Hello world","plain/text").build();
      }
      @GET @Produces("text/plain") String helloWorld2() {
        return "Hello world without path!";
      }
    }
    

    web.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app id="api" version="3.0" 
         xmlns="http://java.sun.com/xml/ns/j2ee" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_3_0.xsd">
    <display-name>Service</display-name>
    

    build.gradle:

    apply plugin: 'java'
    apply plugin: 'war'
    
    repositories { mavenCentral() }
    
    dependencies {
        providedCompile 'org.apache.openejb:javaee-api:6.0-4'
    }
    
    version = '1.0'
    jar {
            manifest {
                    attributes 'Title': 'Services',
                                         'Version': version
            }
    }
    
    </web-app>
    

    I've tried a number of permutations, adding beans.xml, removing, changing order of the annotations, using different compile dependencies for the Java EE classes. I consistently get this error.