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=val2

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