Hi

I'm currently trying to implement an asynchronous jax-rs server (the client 
will be doing some long-polling, waiting for events, so I don't want to lock 
threads on the server).

My target environment is JOnAS 5.2.1 (using Tomcat7 container), but I'm first 
trying to make it work on a vanilla Tomcat7 (for now I have the same issue on 
both).

The error I have is a NPE :

Caused by: java.lang.NullPointerException
        at 
org.apache.cxf.jaxrs.impl.AsyncResponseImpl.<init>(AsyncResponseImpl.java:58)
        at 
org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter(JAXRSUtils.java:650)
        at 
org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:624)
        at 
org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:224)
        at 
org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:94)
        at 
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271)
        ... 26 more

I'm trying to use CXF the (I think) simplest way with simple examples (see end 
of mail).

I've been looking around in the code, from what I've understood, AsyncResponse 
is supposed to work with either :

*         jetty (provides a ContinuationProviderFactory on the bus)

*         servlets 3.0 (checks existence of method "isAsyncSupported" on class 
ServletRequest)

If neither of those conditions is met, then the NullPointerException should 
happen.

However I'm using tomcat 7 and it's supposed to work via the servlets 3.0 
support. So I'm guessing that maybe the servlet is still running on servlet 2.x 
despites being on tomcat 7, maybe that it's because I'm using 
org.apache.cxf.transport.servlet.CXFServlet ? Or I missed a switch somewhere ?

I'm quite stuck, but I'd really like to use this feature (asynchronous 
server-side) for JAX-RS (and then to see if there is something similar for 
JAX-WS).

Thanks in advance!!!



web.xml (to start cxf-servlet)

<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee";
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
         http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd";>
    <servlet>
        <servlet-name>CXFServlet</servlet-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>/cxf/*</url-pattern>
    </servlet-mapping>
</web-app>

cxf-servlet.xml (default spring definition)

<beans xmlns="http://www.springframework.org/schema/beans";
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
       xmlns:jaxws="http://cxf.apache.org/jaxws";
       xmlns:jaxrs="http://cxf.apache.org/jaxrs";
       xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
            http://cxf.apache.org/jaxws
            http://cxf.apache.org/schemas/jaxws.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-servlet.xml"/>

    <jaxws:endpoint id="greeter"
                    implementor="com.mycompany.demo.StockQuoteReporter"
                    address="/StockQuoteReporter"/>

    <jaxrs:server id="helloworlder"
                  serviceClass="demo.rs.server.HelloWorldResource"
                  address="/helloworld"/>
</beans>

HelloWorldResource.java

// some imports...

@Path("/say")
public class HelloWorldResource {

    @GET
    @Produces("text/plain")
    public void helloWorld(AsyncResponse asyncResponse) {
        asyncResponse.setTimeout(1000, TimeUnit.MILLISECONDS);
        asyncResponse.setTimeoutHandler(new TimeoutHandler() {
            public void handleTimeout(AsyncResponse ar) {
                ar.resume("timeout");
            }
        });
    }
}



_________________________________________________________________________________________________________________________

Ce message et ses pieces jointes peuvent contenir des informations 
confidentielles ou privilegiees et ne doivent donc
pas etre diffuses, exploites ou copies sans autorisation. Si vous avez recu ce 
message par erreur, veuillez le signaler
a l'expediteur et le detruire ainsi que les pieces jointes. Les messages 
electroniques etant susceptibles d'alteration,
France Telecom - Orange decline toute responsabilite si ce message a ete 
altere, deforme ou falsifie. Merci.

This message and its attachments may contain confidential or privileged 
information that may be protected by law;
they should not be distributed, used or copied without authorisation.
If you have received this email in error, please notify the sender and delete 
this message and its attachments.
As emails may be altered, France Telecom - Orange is not liable for messages 
that have been modified, changed or falsified.
Thank you.

Reply via email to