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