Have my own little conversation going here now ;) So looking deeper at that other post, apparently you need to have a unique root path name for each service class for the matching to work right now. Kind of a bummer that you can't have multiple classes with / for a root path and just have CXF search all / path classes for particular sub-resource locators. But at least I know how to get around the issue there.
On Wed, Apr 15, 2009 at 4:51 PM, David Castro <[email protected]>wrote: > Interesting, I found a similar problem on the lists just now, but no > resolution... > > http://www.mail-archive.com/[email protected]/msg03977.html > > > On Wed, Apr 15, 2009 at 4:31 PM, David Castro <[email protected]>wrote: > >> I am having an issue mapping multiple service beans. Only the first bean's >> paths seem to be mapped at all. So something like this would not work for >> me, because only authenticate service methods would be available: >> >> <jaxrs:server id="serviceServer" address="/"> >> <jaxrs:serviceBeans> >> <ref bean="authServiceImpl" /> >> <ref bean="contactServiceImpl" /> >> </jaxrs:serviceBeans> >> >> *Here are the service interfaces:* >> >> public interface AuthenticationService { >> @GET >> @Path("/authenticate/{uid}:{pass}") >> public Response authenticate(@PathParam("uid") String username, >> @PathParam("pass") String password); >> } >> >> public interface ContactService { >> @GET >> @Path("/contacts") >> public Contacts getContacts(); >> } >> >> I can't find a solution to this other than creating an uber service >> interface that extended all the other interfaces...or potentially creating >> new jaxrs:server entries for each and every service. Thoughts, suggestions? >> >> Not sure if it is related, but also ran into a similar problem, where when >> I have two service interfaces like below...where service A and B both have a >> common sub-path. It seems that both /v3/authenticate and /v4/authenticate >> are available. However, /v4/authenticate/validate is not available. No >> sub-path for a method is available in v4 if v3 doesn't have the same path. >> If I remove the v3 bean, then both v4 methods are available. >> >> *Take the following from cxf_beans.xml where I define 2 service beans:* >> >> <jaxrs:server id="serviceServer" address="/"> >> <jaxrs:serviceBeans> >> <ref bean="contactServiceImpl3" /> >> <ref bean="contactServiceImpl4" /> >> </jaxrs:serviceBeans> >> >> *Here are the service interfaces:* >> >> ===== >> >> @Path("/v3") >> public interface AuthenticationService { >> @GET >> @Path("/authenticate/{uid}:{pass}") >> public Response authenticate(@PathParam("uid") String username, >> @PathParam("pass") String password); >> } >> >> ===== >> >> @Path("/v4") >> public interface AuthenticationService { >> @GET >> @Path("/authenticate/{uid}:{pass}") >> public Response authenticate(@PathParam("uid") String username, >> @PathParam("pass") String password); >> >> @GET >> @Path("/authenticate/validate/{token}") >> public Response validate(@PathParam("token") String token); >> } >> >> ===== >> >> >> *The error in the logs:* >> >> 2009-04-15 22:39:51,028 ERROR [STDERR] Apr 15, 2009 10:39:51 PM >> org.apache.cxf.jaxrs.utils.JAXRSUtils findTargetMethod >> WARNING: .No operation matching request path >> /authenticate/validate/BTaaZUycRa is found, ContentType : */*, Accept : >> application/xml >> > >
