Hi > First problem that I've noticed is that I can't find the @UriTemplate > annotation. It's not in the jsr311-api-0.5.jar file where all of the other > JSR annotations can be found. So, I had a look at the JSR spec, and the > @Path annotation seemed appropriate so I used that instead. Is that correct?
Yes, 0.5 replaced @UriTemplate with @Path > Second problem is that I implemented a service using the @Path annotation > and I'm getting a null pointer exception as described below. It's a NumberFormatException there, and it's caused by the fact there's no expected QueryParam in a request. You need to use @UriParam instead (please note in 0.6 it will be replaced with @PathParam), see below... > When I try to add @HttpMethod annotations above the @Path annotations I get > the error "The annotation @HttpMethod is disallowed for this location" Yes, starrting from 0.5 one can use @HttpMethod to create designators, sucg as @GET/@[EMAIL PROTECTED]/@DELETE, so you may for example create @GetRequest if you think it's better than @GET or create designators for other http methods Here's the class : @Path("/emitterResource") public class EmitterResource { @GET @Path("/getEmitters") public Collection<Emitter> getEmitters() { return emitterDAO.getAllEmitters(); } @GET @Path("/emitters/{emitterId}") public Emitter getEmitter(@UriParam("emitterId") int id) { LOG.debug("looking for emitter id " + id); return emitterDAO.get(id); } } You might want to chnage it like this to minimize a bit the numbner of annotations : @Path("/emitters") public class EmitterResource { @GET public Collection<Emitter> getEmitters() { return emitterDAO.getAllEmitters(); } @GET @Path("{emitterId}") public Emitter getEmitter(@UriParam("emitterId") int id) { LOG.debug("looking for emitter id " + id); return emitterDAO.get(id); } } Hope it helps Cheers, Sergey > > Hi there, > > I've been looking through the user group and I haven't been able to find an > answer to my problem so I thought I'd send a post and see if anyone can help > me. > > I downloaded the 20080228 and the 20080303 snapshots. What I describe below > are problems that I have found in both. > > First problem that I've noticed is that I can't find the @UriTemplate > annotation. It's not in the jsr311-api-0.5.jar file where all of the other > JSR annotations can be found. So, I had a look at the JSR spec, and the > @Path annotation seemed appropriate so I used that instead. Is that correct? > > Second problem is that I implemented a service using the @Path annotation > and I'm getting a null pointer exception as described below. I am using > spring configuration, so here's my spring config file: > > <beans xmlns="http://www.springframework.org/schema/beans" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xmlns:jaxrs="http://cxf.apache.org/jaxrs" > xmlns:cxf="http://cxf.apache.org/core" > xsi:schemaLocation=" > http://www.springframework.org/schema/beans > http://www.springframework.org/schema/beans/spring-beans.xsd > http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd > http://cxf.apache.org/bindings/soap > http://cxf.apache.org/schemas/configuration/soap.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="registryEndpoint" address="/"> > <jaxrs:serviceBeans> > <ref bean="emitterResource"/> > </jaxrs:serviceBeans> > </jaxrs:server> > </beans> > > Here's the resource file: > > @Path("/emitterResource") > public class EmitterResource { > > @Path("/getEmitters") > public Collection<Emitter> getEmitters() { > return emitterDAO.getAllEmitters(); > } > > @Path("/emitters/{emitterId}") > public Emitter getEmitter(@QueryParam("emitterId") int id) { > //public Emitter getEmitter(@WebParam(name = "emitterId") int id) { > LOG.debug("looking for emitter id " + id); > return emitterDAO.get(id); > } > > @Path("/emitters") > public void addEmitter(@QueryParam("emitter")Emitter emitter) { > LOG.warn("Adding an emitter"); > LOG.warn("ID is " + emitter.getId()); > LOG.warn("Name is " + emitter.getName()); > emitterDAO.save(emitter); > } > > When I try to add @HttpMethod annotations above the @Path annotations I get > the error "The annotation @HttpMethod is disallowed for this location" > > The Emitter class is just a POJO with an Id and a Name. > > Here's a snippet of my client code (I'm using apache commons HttpClient) : > > Emitter e = new Emitter(); > e.setId(12345); > e.setName("Test Name"); > PostMethod post = new > PostMethod("http://localhost:8080/emitterResource/emitters"); > > StringWriter stringWriter = new StringWriter(); > jaxbMarshaller.marshal(registryObject, stringWriter); > > StringRequestEntity requestEntity = new > StringRequestEntity(stringWriter.toString(), "text/xml", "ISO-8859-1"); > post.setRequestEntity(requestEntity); > > HttpClient httpClient = new HttpClient(); > int result = httpClient.executeMethod(post); > System.out.println("Response code " + result); > System.out.println(post.getResponseBodyAsString()); > post.releaseConnection(); > > I'm deploying the server in tomcat 5.5 successfully (no errors), but when I > run the client, I'm getting the following exception: > > 05-Mar-2008 11:08:39 org.apache.cxf.phase.PhaseInterceptorChain doIntercept > FINE: Invoking handleMessage on interceptor > [EMAIL PROTECTED] > 05-Mar-2008 11:08:39 org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor > handleMessage > FINE: Request path is: /emitterResource/emitters/ > 05-Mar-2008 11:08:39 org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor > handleMessage > FINE: Request HTTP method is: POST > 05-Mar-2008 11:08:39 org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor > handleMessage > FINE: Request contentType is: text/xml; charset=ISO-8859-1 > 05-Mar-2008 11:08:39 org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor > handleMessage > FINE: Accept contentType is: */* > 05-Mar-2008 11:08:39 org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor > handleMessage > INFO: Found operation: getEmitter > 05-Mar-2008 11:08:39 org.apache.cxf.phase.PhaseInterceptorChain doIntercept > INFO: Interceptor has thrown exception, unwinding now > java.lang.NumberFormatException: null > at java.lang.Integer.parseInt(Integer.java:415) > at java.lang.Integer.valueOf(Integer.java:553) > at org.apache.cxf.common.util.PrimitiveUtils.read(PrimitiveUtils.java:60) > at org.apache.cxf.jaxrs.JAXRSUtils.readQueryString(JAXRSUtils.java:295) > at org.apache.cxf.jaxrs.JAXRSUtils.processParameter(JAXRSUtils.java:277) > at org.apache.cxf.jaxrs.JAXRSUtils.processParameters(JAXRSUtils.java:241) > at > org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:112) > 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:213) > 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:269) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) > at > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210) > at > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174) > at > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) > at > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) > at > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108) > at > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151) > at > org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870) > at > org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665) > at > org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528) > at > org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81) > at > org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685) > at java.lang.Thread.run(Thread.java:619) > > Just for completeness, I've captured what's being sent on the wire, and here > it is: > > <?xml version="1.0" encoding="UTF-8" standalone="yes"?><emitter > xmlns="http://registry.mscape.westglobal.com"><id>12345</id><name>Test > Emitter</name></emitter> > > Can anyone help me please, I'm completely stuck. > > thanks, > daveor > > > -- > View this message in context: > http://www.nabble.com/CXF-REST-problems-tp15848325p15848325.html > Sent from the cxf-user mailing list archive at Nabble.com. ---------------------------- IONA Technologies PLC (registered in Ireland) Registered Number: 171387 Registered Address: The IONA Building, Shelbourne Road, Dublin 4, Ireland