Hi As far as I know annotations at the interface level will only supported in the 0.7 version (it's mandated in the corresponding version of the spec), and only method-level annotations will be inherited (I'll need to confirm it), Jersey does it on the current trunk (which is corresponds to the soon to be released stable 0.7 jaxrs-api). Brad, try to put the annotations on the actual root resource class, just to see that's working. Then at a later stage you may want to put the annotations on the superclass, but first try from the root resource class...
Cheers, Sergey > 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(); > ---------------------------- IONA Technologies PLC (registered in Ireland) Registered Number: 171387 Registered Address: The IONA Building, Shelbourne Road, Dublin 4, Ireland
