2015-11-04 3 views
1

я пытаюсь создать простой веб-службы RESTful и клиента с помощью CXF 3.1.2, как показано ниже,Проблема при доступе метод пост в службе отдыха CXF

Услуги:

package com.rs.sample; 

    import javax.jws.WebService; 
    import javax.ws.rs.Consumes; 
    import javax.ws.rs.GET; 
    import javax.ws.rs.POST; 
    import javax.ws.rs.Path; 
    import javax.ws.rs.PathParam; 
    import javax.ws.rs.Produces; 
    import javax.ws.rs.core.MediaType; 

    public class GenServiceImpl { 

    @GET 
    @Produces(MediaType.TEXT_PLAIN) 
    @Consumes(MediaType.TEXT_PLAIN) 
    @Path("/login/{ext}") 
    public String login(@PathParam("ext") Integer ext) { 
    return "LoggedIn"; 
    } 

    @POST 
    @Produces(MediaType.TEXT_PLAIN) 
    @Consumes(MediaType.TEXT_PLAIN) 
    @Path("/logout/{ext}") 
    public String logout(@PathParam("ext") Integer ext) { 
    return "LoggedOut"; 
    } 
    } 

Клиент:

import javax.ws.rs.core.MediaType; 
    import javax.ws.rs.core.Response; 
    import org.apache.cxf.jaxrs.client.WebClient; 
    public class TestClient { 
    static final String REST_URI = "http://localhost:8080/RestfulSample/Restful"; 
    public static void main(String[] args) { 
    WebClient client = WebClient.create(REST_URI); 


    /* 
    //Get 
    client.path("login").path(new Integer(1234)).accept(MediaType.TEXT_PLAIN); 
    String loginResponse = client.get(String.class); 
    System.out.println(loginResponse); */ 

    //Post 
    client.path("logout").accept(MediaType.TEXT_PLAIN); 
    String logoutResponse = client.post("1024").toString(); 
    System.out.println(logoutResponse); 
    } 

Здесь у меня нет проблем с доступом к методу входа (Get), и он работает должным образом. Но когда я попытался получить доступ к методу выхода из системы (Post) Я получаю ошибку ниже,

 WARNING: No operation matching request path "/RestfulSample/Restful/agentLogout" is found, Relative Path: /agentLogout, HTTP Method: POST, ContentType: application/xml, Accept: text/plain,. Please enable FINE/TRACE log level for more details. 
    Nov 04, 2015 3:49:32 PM org.apache.cxf.jaxrs.impl.WebApplicationExceptionMapper toResponse 
    WARNING: javax.ws.rs.ClientErrorException: HTTP 404 Not Found 
    at org.apache.cxf.jaxrs.utils.SpecExceptions.toHttpException(SpecExceptions.java:117) 
    at org.apache.cxf.jaxrs.utils.ExceptionUtils.toHttpException(ExceptionUtils.java:162) 
    at org.apache.cxf.jaxrs.utils.JAXRSUtils.findTargetMethod(JAXRSUtils.java:528) 
    at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:177) 
    at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:77) 
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308) 
    at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121) 
    at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:251) 
    at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:234) 
    at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:208) 
    at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:160) 
    at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:171) 
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:293) 
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:212) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:650) 
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:268) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:620) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 

Не могли бы вы исправить мою ошибку

Спасибо,

+1

'@Path ("/logout/{ext} ")'. Вам нужен еще один сегмент пути после '/ logout'. Независимо от значения '{ext}' должно быть –

+0

@peeskillet Спасибо за ваш ответ. И вот я передаю значение logout client.post («1024») – sasikals26

+1

Это тело запроса. '@ PathParam' для URI, поэтому вам нужно добавить 1024 к пути URI, т. Е.« Path («logout»). Path («1024») '. Прямо сейчас без 1024 в пути конечная точка не существует. Если вы хотите поместить данные в тело POST, измените его на '@Path ("/logout ")', выньте '@ PathParam' и создайте метод param type' String'. Вам нужно будет разобрать его самостоятельно –

ответ

1

@Path("/logout/{ext}"). Вам понадобится другой сегмент пути после/выхода. Независимо от значения {ext} должно быть

client.post("1024") - это тело запроса. @PathParam для URI, поэтому вам нужно добавить 1024 к пути URI, то есть path("logout").path("1024"). Прямо сейчас без 1024 в пути конечная точка не существует (следовательно, 404).

Если вы хотите поместить данные в тело POST, затем измените его на @Path ("/ logout"), выньте @PathParam и создайте метод param type String. Вам нужно будет разобрать его самостоятельно