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();


Reply via email to