Return-Path: X-Original-To: apmail-cxf-dev-archive@www.apache.org Delivered-To: apmail-cxf-dev-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 904C311457 for ; Wed, 10 Sep 2014 21:24:41 +0000 (UTC) Received: (qmail 11594 invoked by uid 500); 10 Sep 2014 21:24:41 -0000 Delivered-To: apmail-cxf-dev-archive@cxf.apache.org Received: (qmail 11523 invoked by uid 500); 10 Sep 2014 21:24:41 -0000 Mailing-List: contact dev-help@cxf.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cxf.apache.org Delivered-To: mailing list dev@cxf.apache.org Delivered-To: moderator for dev@cxf.apache.org Received: (qmail 89690 invoked by uid 99); 10 Sep 2014 21:16:45 -0000 X-ASF-Spam-Status: No, hits=1.5 required=5.0 tests=HTML_MESSAGE,RCVD_IN_DNSWL_LOW,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (athena.apache.org: local policy) From: "Nagulapalli, Srinivas" To: "dev@cxf.apache.org" Date: Wed, 10 Sep 2014 17:16:15 -0400 Subject: Help- Cannot make Client invocation using ParameterConverter to JAX_RS service using cxf-3.0.2 Thread-Topic: Help- Cannot make Client invocation using ParameterConverter to JAX_RS service using cxf-3.0.2 Thread-Index: Ac/NPHS7iBaz36VBS2KcNz1nnXtcbg== Message-ID: <8036DF2430E7FC4CA2CA2A12B6A6AC7256D792BA2E@SUSDAY230MBX.corp.ncr.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: acceptlanguage: en-US Content-Type: multipart/alternative; boundary="_000_8036DF2430E7FC4CA2CA2A12B6A6AC7256D792BA2ESUSDAY230MBXc_" MIME-Version: 1.0 X-Virus-Checked: Checked by ClamAV on apache.org --_000_8036DF2430E7FC4CA2CA2A12B6A6AC7256D792BA2ESUSDAY230MBXc_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi When invoking simple JAX-RS service marshalling java.util.Date, it works on= server side, but on client side when invoking after making sure ParameterC= onverter is added to jaxrs:providers element Under jaxrs:client, it gives error saying the method cannot be matched. 3.= 0.2 snapshot has fix for date marshalling and want to make sure if I am mis= sing something. Stacktrace, client invoking code and config used + Server side code and its= config are below. Using: cxf-*-3.0.2 snapshot (because it has fix for the needed Date marshal= ling) cxf-core-3.0.2-20140828.070840-30.jar, cxf-rt-frontend-jaxrs-3.0.2-20140828= .071806-27.jar, cxf-rt-rs-client.3.0.2-20140828.072409-26.jar, cxf-rt-rs-se= rvice-description-3.0.2-20140828.071832-27.jar cxf-rt-transports-http-3.0.2-20140828.071216-27.jar Appreciate greatly any help or pointers. Thanks Srini Stacktrace: WARN http-bio-8080-exec-8 org.apache.cxf.jaxrs.utils.JAXRSUtils - No operat= ion matching request path "/RestDemo2/services/rest/UserManager/getUserBefo= reDate/1959-01-01T00:00:00.000Z" is found, Relative Path: /getUserBeforeDat= e/1959-01-01T00:00:00.000Z, HTTP Method: GET, ContentType: application/json= , Accept: application/json,. Please enable FINE/TRACE log level for more de= tails. WARN http-bio-8080-exec-8 org.apache.cxf.jaxrs.impl.WebApplicationException= Mapper - javax.ws.rs.ClientErrorException: HTTP 406 Not Acceptable at org.apache.cxf.jaxrs.utils.SpecExceptions.toHttpException(SpecEx= ceptions.java:117) at org.apache.cxf.jaxrs.utils.ExceptionUtils.toHttpException(Except= ionUtils.java:157) at org.apache.cxf.jaxrs.utils.JAXRSUtils.findTargetMethod(JAXRSUtil= s.java:526) at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processReque= st(JAXRSInInterceptor.java:177) at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessag= e(JAXRSInInterceptor.java:77) at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInte= rceptorChain.java:307) at org.apache.cxf.transport.ChainInitiationObserver.onMessage(Chain= InitiationObserver.java:121) at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(Abs= tractHTTPDestination.java:243) at org.apache.cxf.transport.servlet.ServletController.invokeDestina= tion(ServletController.java:223) at org.apache.cxf.transport.servlet.ServletController.invoke(Servle= tController.java:197) at org.apache.cxf.transport.servlet.ServletController.invoke(Servle= tController.java:149) at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFN= onSpringServlet.java:171) at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleReque= st(AbstractHTTPServlet.java:290) at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(Abstr= actHTTPServlet.java:214) at javax.servlet.http.HttpServlet.service(HttpServlet.java:620) at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(Abs= tractHTTPServlet.java:265) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter= (ApplicationFilterChain.java:303) at org.apache.catalina.core.ApplicationFilterChain.doFilter(Applica= tionFilterChain.java:208) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.ja= va:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter= (ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter(Applica= tionFilterChain.java:208) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWra= pperValve.java:220) at org.apache.catalina.core.StandardContextValve.invoke(StandardCon= textValve.java:122) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostVa= lve.java:171) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportVa= lve.java:103) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.= java:950) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngi= neValve.java:116) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapte= r.java:408) at org.apache.coyote.http11.AbstractHttp11Processor.process(Abstrac= tHttp11Processor.java:1070) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.pro= cess(AbstractProtocol.java:611) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEn= dpoint.java:314) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExec= utor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExe= cutor.java:615) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(T= askThread.java:61) at java.lang.Thread.run(Thread.java:724) ///////////////////// //Client side: public class UserManagerServiceTest { public static void main(String[] args) { ClassPathXmlApplicationContext appContext =3D new ClassPath= XmlApplicationContext (new String[]{"rest-client.xml"}); UserManager userManagerService =3D (UserManager) appContext= .getBean("userManagerService"); Date startDate =3D new DateTime(1959, 1, 1, 0, 0, DateTimeZ= one.UTC).toDate(); Date endDate =3D new DateTime(1962, 1, 1, 0, 0, DateTimeZon= e.UTC).toDate(); userManagerService.getUserBeforeDate(startDate); userManagerService.getUserByDateRange(startDate, endDate); appContext.close(); } } /////////////////////// //rest-client.xml //////////////////// /////Server side:////// //UserManager.java: @Consumes("application/json") @Produces("application/json") public interface UserManager { @GET @Path("/getUserByDateRange/{startDate}/{endDate}") @Produces(MediaType.TEXT_PLAIN) public String getUserByDateRange(@PathParam("startDate") Date start= Date, @PathParam("endDate") Date endDate); @GET @Path("/getUserBeforeDate/{startDate}") @Produces(MediaType.TEXT_PLAIN) public String getUserBeforeDate(@PathParam("startDate") Date startD= ate); @POST @Path("/insertUser/") public UserResponse insertUser(UserRequest request); } //////////////////////// //UserManagerService.java public class UserManagerService implements UserManager{ private UserManagerDao userDao; public UserManagerDao getUserDao(){return userDao;} public void setUserDao(UserManagerDao userDao){this.userDao =3D use= rDao;} public String getUserByDateRange(Date startDate, Date endDate){ String response =3D new String(); StringBuffer buf =3D new StringBuffer(); try{ List listUsers =3D getUserDao().fetchUserByDa= teRange(startDate, endDate); for (User user: listUsers){ buf.append("User:" + user); buf.append("\n"); } return buf.toString(); }catch (Exception e){ response =3D "Error:"+ e.getClass() + ": " + e.getM= essage(); } return response; } public String getUserBeforeDate(Date startDate){ String response =3D new String(); StringBuffer buf =3D new StringBuffer(); try{ List listUsers =3D getUserDao().fetchUserBefo= reDate(startDate); for (User user: listUsers){ buf.append("User:" + user); buf.append("\n"); } return buf.toString(); }catch (Exception e){ response =3D "Error:"+ e.getClass() + ": " + e.getM= essage(); } return response; } public UserResponse insertUser(UserRequest request){ UserResponse response =3D new UserResponse(); try{ getUserDao().insertUser(request.getUser()); } catch (Exception e){ response.setSuccess(false); response.setErrorMessage(e.getClass() + ": " + e.ge= tMessage()); } return response; } } ///////////////////////////////// //SomeDateConverter.java public class SomeDateConverter implements ParamConverter { Logger logger =3D LoggerFactory.getLogger(SomeDateConverter.class); @Override public Date fromString(String dateString) { if (dateString.contains("-")) { DateTime result =3D ISODateTimeFormat.dateTimeParse= r().withZone(DateTimeZone.UTC).parseDateTime(dateString); return result.toDate(); } return new Date(Long.parseLong(dateString)); } @Override public String toString(Date dateToConvert) { return ISODateTimeFormat.dateTime().withZone(DateTimeZone.U= TC) .print(dateToConvert.getTime()); } } ///////////////////////////////// //ParamConverterProviderImpl.java public class ParamConverterProviderImpl implements ParamConverterProvider { private final Map, ? extends ParamConverter> paramConve= rters; public ParamConverterProviderImpl( Map, ? extends Par= amConverter> paramConverters) { this.paramConverters =3D paramConverters; } @Override public ParamConverter getConverter(Class rawClass,Type ge= nericType, Annotation[] annotations) { return (ParamConverter) paramConverters.get(rawClass); } } //////////////////////// //rest-context.xml ////////////////// --_000_8036DF2430E7FC4CA2CA2A12B6A6AC7256D792BA2ESUSDAY230MBXc_--