All,
I have implemented a set of basic classes in order to test the use of
JAX-RS sub resources and found a NullPointerException (see end of
message for stack trace).
I am getting the CXF 2.1 version from the maven repository.
In my example, I have 2 methods:
hello
hello2
hello2 is a resource method marked with a @GET and a @PATH
hello is a sub resource method without a @GET but with a @PATH
Both methods return an Helloe object. A call to hello2 via a browser
(http://localhost:9095/mzt-services/services/HelloRest/helloservice/hello2/toto)
works fine and returns something like:
<helloe>
<age>10</age>
<name>toto</name>
</helloe>
The call to hello via a browser
(http://localhost:9095/mzt-services/services/HelloRest/helloservice/hello/toto/age)
returns the following: (exception is pasted at the end)
<ns1:XMLFault>
<ns1:faultstring>java.lang.NullPointerException</ns1:faultstring>
</ns1:XMLFault>
The code for the Root Resource (the REST service is):
@Path("helloservice")
public class HelloServiceImpl implements HelloService
{
@Path("hello/{name}")
public Helloe hello(@PathParam("name")
String name)
{
Helloe helloe = new HelloeImpl();
// Hardcode values
helloe.setName(name);
helloe.setAge(10);
return helloe;
}
@GET
@Path("hello2/{name}")
public Helloe hello2(@PathParam("name")
String name)
{
Helloe helloe = new HelloeImpl();
// Hardcode values
helloe.setName(name);
helloe.setAge(10);
return helloe;
//return "<name>" + name + "</name>";
}
}
The code for the HelloeImpl class is:
@XmlRootElement(name = "helloe")
public class HelloeImpl implements Helloe
{
private String name;
private int age;
public HelloeImpl() {
// TODO Auto-generated constructor stub
}
@GET
@Path("/name")
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
@GET
@Path("/age")
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age = age;
}
}
Exception:
=======
May 18, 2008 10:23:23 PM
org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor han
dleMessage
INFO: Found operation: hello
May 18, 2008 10:23:23 PM org.apache.cxf.phase.PhaseInterceptorChain
doIntercept
INFO: Interceptor has thrown exception, unwinding now
java.lang.NullPointerException
at
org.apache.cxf.jaxrs.JAXRSUtils.findTargetMethod(JAXRSUtils.java:237)
at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:139)
at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:53)
at
org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInv
okerInterceptor.java:56)
at
org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecu
tor.java:37)
at
org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(Se
rviceInvokerInterceptor.java:92)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseIntercept
orChain.java:221)
at
org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainIniti
ationObserver.java:78)
at
org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDes
tination.java:92)
at
org.apache.cxf.transport.servlet.ServletController.invokeDestination(
ServletController.java:214)
at
org.apache.cxf.transport.servlet.ServletController.invoke(ServletCont
roller.java:113)
at
org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCX
FServlet.java:170)
at
org.apache.cxf.transport.servlet.AbstractCXFServlet.doGet(AbstractCXF
Servlet.java:152)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at
org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:442
)
at
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:3
57)
at
org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:2
26)
at
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:6
15)
at
org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHand
lerCollection.java:150)
at
org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.
java:123)
at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:1
41)
at org.mortbay.jetty.Server.handle(Server.java:272)
at
org.mortbay.jetty.HttpConnection.handlerRequest(HttpConnection.java:3
96)
at
org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpCo
nnection.java:652)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:488)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:198)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:311)
at
org.mortbay.jetty.nio.HttpChannelEndPoint.run(HttpChannelEndPoint.jav
a:270)
at
org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool
.java:475