2015-11-27 2 views
2

Я следующего CXF конфигурационного файлаJAX-RS APACHE-CXF: Нет методы ресурсов не были найдены для класса ресурса

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:jaxws="http://cxf.apache.org/jaxws" 
     xmlns:jaxrs="http://cxf.apache.org/jaxrs" 
     xmlns:jpa="http://www.springframework.org/schema/data/jpa" 
     xmlns:cxf="http://cxf.apache.org/core" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd 
     http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd 
     http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd 
     http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd"> 
    <import resource="classpath:META-INF/cxf/cxf.xml"/> 
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/> 

    <context:component-scan base-package="test.stub.rest" /> 

    <!-- Enable CXF logging --> 
    <cxf:bus> 
     <cxf:features> 
      <cxf:logging/> 
     </cxf:features> 
    </cxf:bus> 

    <!-- CXF Services --> 
    <jaxrs:server id="test" address="/stub/postUrl"> 
     <jaxrs:serviceBeans> 
      <ref bean="testClass" /> 
     </jaxrs:serviceBeans> 
    </jaxrs:server> 

    <bean id="testClass" class="test.stub.rest.TestClass"> 
    </bean> 
</beans> 

web.xml

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > 
<web-app> 
    <display-name>Stubby CXF</display-name> 

    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value> 
      classpath:spring/stub-cxf-applicationContext.xml 
     </param-value> 
    </context-param> 

    <listener> 
     <listener-class> 
      org.springframework.web.context.ContextLoaderListener 
     </listener-class> 
    </listener> 

    <servlet> 
     <servlet-name>CXFServlet</servlet-name> 
     <display-name>CXF Servlet</display-name> 
     <servlet-class> 
      org.apache.cxf.transport.servlet.CXFServlet 
     </servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>CXFServlet</servlet-name> 
     <url-pattern>/services/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

Класс обслуживания

@Path("/test") 
public class TestService { 
    protected final Logger log = LoggerFactory.getLogger(TestService.class); 

    @Path("/hello") 
    @Produces("text/html") 
    public String hello(@RequestBody String payload) { 

     return "OK"; 
    } 
} 

Теперь, когда я звоню в эту службу, он переходит к методу hello и после возвращения строки «OK» из этого метода он дает следующее ошибка

13:11:35.142 [http-bio-8080-exec-3] WARN o.a.cxf.jaxrs.utils.ResourceUtils - No resource methods have been found for resource class java.lang.String 
13:11:35.142 [http-bio-8080-exec-3] ERROR org.apache.cxf.jaxrs.JAXRSInvoker - No subresource locator found for path/
13:11:35.142 [http-bio-8080-exec-3] WARN o.a.c.j.i.WebApplicationExceptionMapper - javax.ws.rs.NotFoundException 
    at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:245) 
    at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:102) 
    at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58) 
    at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:94) 
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272) 
    at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121) 
    at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:239) 
    at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:248) 
    at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:222) 
    at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:153) 
    at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:167) 
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:286) 
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:206) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647) 
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:262) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:205) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:745) 

13:11:35.142 [http-bio-8080-exec-3] DEBUG o.a.cxf.phase.PhaseInterceptorChain - Invoking handleMessage on interceptor [email protected] 
13:11:35.143 [http-bio-8080-exec-3] DEBUG o.a.c.i.OutgoingChainInterceptor - Interceptors contributed by bus: [[email protected], [email protected]] 
13:11:35.143 [http-bio-8080-exec-3] DEBUG o.a.c.i.OutgoingChainInterceptor - Interceptors contributed by service: [] 
13:11:35.143 [http-bio-8080-exec-3] DEBUG o.a.c.i.OutgoingChainInterceptor - Interceptors contributed by endpoint: [[email protected]] 
13:11:35.143 [http-bio-8080-exec-3] DEBUG o.a.c.i.OutgoingChainInterceptor - Interceptors contributed by binding: [[email protected]] 
13:11:35.143 [http-bio-8080-exec-3] DEBUG o.a.cxf.phase.PhaseInterceptorChain - Chain [email protected] was created. Current flow: 
    setup [PolicyOutInterceptor] 
    prepare-send [MessageSenderInterceptor] 
    pre-stream [LoggingOutInterceptor] 
    marshal [JAXRSOutInterceptor] 

13:11:35.143 [http-bio-8080-exec-3] DEBUG o.a.cxf.phase.PhaseInterceptorChain - Invoking handleMessage on interceptor [email protected] 
13:11:35.143 [http-bio-8080-exec-3] DEBUG o.a.c.ws.policy.PolicyOutInterceptor - No binding operation info. 
13:11:35.143 [http-bio-8080-exec-3] DEBUG o.a.cxf.phase.PhaseInterceptorChain - Invoking handleMessage on interceptor [email protected] 
13:11:35.143 [http-bio-8080-exec-3] DEBUG o.a.cxf.phase.PhaseInterceptorChain - Adding interceptor org.apache.cxf.inte[email protected]275146fe to phase prepare-send-ending 
13:11:35.143 [http-bio-8080-exec-3] DEBUG o.a.cxf.phase.PhaseInterceptorChain - Chain [email protected] was modified. Current flow: 
    setup [PolicyOutInterceptor] 
    prepare-send [MessageSenderInterceptor] 
    pre-stream [LoggingOutInterceptor] 
    marshal [JAXRSOutInterceptor] 
    prepare-send-ending [MessageSenderEndingInterceptor] 

13:11:35.143 [http-bio-8080-exec-3] DEBUG o.a.cxf.phase.PhaseInterceptorChain - Invoking handleMessage on interceptor [email protected] 
13:11:35.143 [http-bio-8080-exec-3] DEBUG o.a.cxf.phase.PhaseInterceptorChain - Invoking handleMessage on interceptor [email protected] 
13:11:35.143 [http-bio-8080-exec-3] DEBUG o.a.cxf.phase.PhaseInterceptorChain - Invoking handleMessage on interceptor org.apache.cxf.inte[email protected]275146fe 
13:11:35.144 [http-bio-8080-exec-3] INFO o.a.c.i.LoggingOutInterceptor - Outbound Message 
--------------------------- 
ID: 2 
Response-Code: 404 
Content-Type: 
Headers: {Date=[Fri, 27 Nov 2015 07:41:35 GMT], Content-Length=[0]} 
-------------------------------------- 
13:11:35.144 [http-bio-8080-exec-3] DEBUG o.a.c.t.servlet.ServletController - Finished servicing http request on thread: Thread[http-bio-8080-exec-3,5,main] 

Я что-то не так? Я использую apache-cxf, spring, jas-rs. Пожалуйста, дайте мне знать, если это ответит где-то в другом месте.

+0

Что пример URL вы получаете выше исключение для? – nobeh

+0

http: // localhost: 8080/stub-test-war/services/stub/postUrl/test/hello – Ritesh

ответ

4

Вам нужен метод HTTP, такие как @GET:

@GET 
@Path("/hello") 
@Produces("text/html") 
public String hello(@RequestBody String payload) { 

    return "OK"; 
} 
+0

Не так ли, если я не упоминаю ничего, что будет обрабатывать как «Get», так и «Post»? – Ritesh

+1

Спасибо, я считаю, что обязательным является аннотация HTTP-метода для открытых методов. – Ritesh

Смежные вопросы