Maybe the annotations have to go in the implementation class instead/as well? I didn't use an "interface" - just an instantiatable class (with method bodies).
Apart from broken POST data, thats the only other thing I can think of. Doug On Mon, 7 Apr 2008, Brad O'Hearne wrote: > Doug, > > Thanks for the reply. I'm still getting the same errors, going to show > you exactly what happens in my implementation. Here is my 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> > <context-param> > <param-name>contextConfigLocation</param-name> > <param-value>WEB-INF/beans.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> > > Here is my beans.xml: > > <?xml version="1.0" encoding="UTF-8"?> > <beans xmlns="http://www.springframework.org/schema/beans" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xmlns:jaxrs="http://cxf.apache.org/jaxrs" > xsi:schemaLocation=" > http://www.springframework.org/schema/beans > http://www.springframework.org/schema/beans/spring-beans.xsd > http://cxf.apache.org/jaxrs > http://cxf.apache.org/schemas/jaxrs.xsd"> > <import resource="classpath:META-INF/cxf/cxf.xml" /> > <import > > resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml" /> > <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> > <jaxrs:server id="userService" address="/"> > <jaxrs:serviceBeans> > <bean > class="com.brad.UserService" /> > </jaxrs:serviceBeans> > </jaxrs:server> > </beans> > > Here is my service interface (which is implemented by the UserService > class referenced in beans.xml): > > @Path("/UserService") > public interface IUserService { > @POST > @Path("authenticate") > @ConsumeMime("application/xml") > @ProduceMime("application/xml") > AuthenticateResponse authenticate(AuthenticateRequest request); > } > > Tomcat loads cleanly (as far as I can tell -- no exceptions). When I > try to access this service with an xml payload and the following URL: > http://localhost:8080/MyWebApp/services/UserService/authenticate > > I get the following exception on the server: > > Apr 6, 2008 7:38:46 AM > org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor handleMessage > SEVERE: No operation found for path: /UserService/authenticate/, > contentType: application/xml, Accept contentType: */* > Apr 6, 2008 7:38:46 AM org.apache.cxf.phase.PhaseInterceptorChain > doIntercept > INFO: Interceptor has thrown exception, unwinding now > org.apache.cxf.interceptor.Fault: .No operation matching request path / > UserService/authenticate/ is found, ContentType : application/xml, > Accept : */*. > at > org > .apache > .cxf > .jaxrs > .interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java: > 120) > at > org > .apache > .cxf > .phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:220) > at > org > .apache > .cxf > .transport > .ChainInitiationObserver.onMessage(ChainInitiationObserver.java:78) > at > org > .apache > .cxf > .transport.servlet.ServletDestination.invoke(ServletDestination.java:92) > at > org > .apache > .cxf > .transport > .servlet.ServletController.invokeDestination(ServletController.java:214) > at > org > .apache > .cxf.transport.servlet.ServletController.invoke(ServletController.java: > 113) > at > org > .apache > .cxf > .transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java: > 170) > at > org > .apache > .cxf > .transport.servlet.AbstractCXFServlet.doPost(AbstractCXFServlet.java: > 148) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:710) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) > at > org > .apache > .catalina > .core > .ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java: > 290) > at > org > .apache > .catalina > .core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) > at > org > .apache > .catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java: > 233) > at > org > .apache > .catalina.core.StandardContextValve.invoke(StandardContextValve.java: > 175) > at > org > .apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java: > 128) > at > org > .apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java: > 102) > at > org > .apache > .catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) > at > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java: > 286) > at > org.apache.coyote.http11.Http11Processor.process(Http11Processor.java: > 844) > at org.apache.coyote.http11.Http11Protocol > $Http11ConnectionHandler.process(Http11Protocol.java:583) > at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java: > 447) > at java.lang.Thread.run(Unknown Source) > > I don't know what the deal is. Any help you can lend would be greatly > appreciated. Thanks. > > Brad > > On Apr 6, 2008, at 4:49 AM, Doug wrote: > > On Sun, 6 Apr 2008, Brad O'Hearne wrote: > >> Thanks for the reply. Couple things -- first, @UriParam is now > >> apparently @PathParam. Additionally, I cannot get the paths to > >> work. I > >> repeatedly get Tomcat errors that there's "No operation matching > >> request path...", and others like it....still a black art....I'd love > >> to get this worked out, as I've got jax-rs loaded, I just need to be > >> able to hit it now. I've tried about every URL combination > >> possible....no dice. > > > > @PathParam may well be the next JSR-311 incarnation, but at least for > > apache-cxf-2.1-incubator-20080306.021818-37.zip the annotation that > > works, > > for me, is @Path. > > > > Specifically, using my previous example, > > I have a tomcat webapps project "reflncover" which I access by the > > URL: > > > > http://localhost:8080/reflncover/svc/rc/init/myclientid?arg1=val1&arg2=va > >l2 > > > > The "svc" component of the URL originates from the WEB-INF/web.xml > > file: > > > > <servlet-mapping> > > <servlet-name>CXFServlet</servlet-name> > > <url-pattern>/svc/*</url-pattern> > > </servlet-mapping> > > > > Also, in my beans.xml file (referenced by web.xml) I have: > > > > <import resource="classpath:META-INF/cxf/cxf.xml" /> > > <import resource="classpath:META-INF/cxf/cxf-extension-jaxrs- > > binding.xml" /> > > <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> > > <jaxrs:server id="reflectionCoverage" address="/"> > > <jaxrs:serviceBeans> > > <bean > > class="au.net.mmsn.rc.services.ReflectionCoverageService" /> > > </jaxrs:serviceBeans> > > </jaxrs:server> > > > > It works for me. > > > > Originally I had a bit of trouble figuring the format of the XML to > > POST > > to my /init/ REST service, so I ended up creating a dummy @GET service > > URL that returned a dummy bean class (as XML) that I created and > > populated within my ReflectionCovergeService class (below). Once I had > > that then submitting the same XML structure back "just worked". > > > > Hope this helps. > > Doug > > > >> Prior to your post, I had reverted back to my Jax-WS frontend, and I > >> discovered that inheritance IS working on serialization (outbound > >> serialization on return types) but is NOT working on deserialization > >> (inbound deserialization of XML to Java types on parameters). The > >> problem is definitely there. > > > > Not sure what you mean by "inheritance" here. I looked briefly at > > JAX-WS > > but wrapping everything in SOAP headers wasn't flexible enough for my > > needs. > > > > Hope this helps > > Doug > > > >> On Apr 5, 2008, at 7:54 PM, Doug wrote: > >>> On Sun, 6 Apr 2008, Brad O'Hearne wrote: > >>>> I've moved to 2.1 SNAPSHOT -- my @UriTemplate annotations still > >>>> won't > >>>> compile. Is there another dependency needed? > >>> > >>> I think @UriTemplate was deprecated/replaced by @Path by the JSR-311 > >>> folks, > >>> but their spec documents aren't uptodate (thats my understanding > >>> anyway) > >>> > >>> > >>> Something like the following works for me (from the 2.1 SNAPSHOT): > >>> > >>> import javax.ws.rs.Path; > >>> import javax.ws.rs.GET; > >>> import javax.ws.rs.POST; > >>> import javax.ws.rs.core.HttpContext; > >>> import javax.ws.rs.core.HttpHeaders; > >>> import javax.ws.rs.core.Response; > >>> import javax.ws.rs.core.UriInfo; > >>> import javax.ws.rs.core.MultivaluedMap; > >>> import javax.ws.rs.ProduceMime; > >>> import javax.ws.rs.ConsumeMime; > >>> import javax.ws.rs.UriParam; > >>> import javax.ws.rs.WebApplicationException; > >>> > >>> @Path("/rc") > >>> public class ReflectionCoverageService { > >>> > >>> @POST > >>> @Path("init/{clientId}") > >>> @ProduceMime("text/plain") > >>> public String init(@UriParam("clientId") String id, @HttpContext > >>> UriInfo > >>> info, SomeJavaBeanClass sjbc) { > >>> MultivaluedMap params = info.getQueryParameters();
