On 17/05/13 11:52, eanbiso wrote:
I'm resting an original SOAP ws so what is important to me is to ensure the 
same behavior.
What happens when you return 'null' on the WS path ?
I've seen that returning null, no exception server side occurs and mine 
"RestExceptionHandler", that implements ResponseHandler, 
ExceptionMapper<Exception>, is not called.
So probably "an empty body and HTTP status 204" is a good response for me.
How can I obtain this returning an empty list?
This is not possible actually with an empty List. The runtime checks if the response entity is null, if it is then it returns a message with no body. It can't deduce that an empty List means no message body, given that in case of XML it will be wrapped in the empty XML payload which still represents a non-empty HTTP response body.

However if I wanted to wrap a List<Integer> into a bean, how should I proceed?

Something like this:

@XmlRootElement
public class NetworkIds {
  List<Integer> ids;
}

Cheers, Sergey
Thanks a lot,

Andrea

Date: Fri, 17 May 2013 03:36:12 -0700
From: [email protected]
To: [email protected]
Subject: Re: Rest ws: how to return an empty List<Integer> avoiding 
java.lang.IndexOutOfBoundsException



        Hi

Please see comments below,

On 17/05/13 11:04, eanbiso wrote:

Hi all,

I have a problem with rest endPoint that return an empty list.

I have a ws interface like this:



      @GET

      @Produces("multipart/form-data;type=text/xml")

      @Path("/GetNetworkIDsManagedBy/{controller}")

      public List<Integer> GetNetworkIDsManagedBy(

                        @PathParam("controller") int controller);



If in the implementor I return an empty list:



      @Override

      public List<Integer> GetNetworkIDsManagedBy(int controller) {

          List<Integer> temp = new ArrayList<Integer>();

          return temp;

      }





this exception occurs:



java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

        at java.util.ArrayList.RangeCheck(Unknown Source)

        at java.util.ArrayList.get(Unknown Source)

        at

org.apache.cxf.jaxrs.ext.MessageContextImpl.convertToAttachments(MessageContextImpl.java:185)

        at

org.apache.cxf.jaxrs.ext.MessageContextImpl.put(MessageContextImpl.java:159)

        at

org.apache.cxf.jaxrs.impl.tl.ThreadLocalMessageContext.put(ThreadLocalMessageContext.java:83)

        at

org.apache.cxf.jaxrs.provider.MultipartProvider.writeTo(MultipartProvider.java:245)

        at

org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.serializeMessage(JAXRSOutInterceptor.java:257)

        at

org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.processResponse(JAXRSOutInterceptor.java:144)

        at

org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.handleMessage(JAXRSOutInterceptor.java:83)

        at

org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)

        at

org.apache.cxf.interceptor.OutgoingChainInterceptor.handleMessage(OutgoingChainInterceptor.java:77)

        at

org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)

        at

org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:123)

        at

org.apache.cxf.transport.http_jetty.JettyHTTPDestination.serviceRequest(JettyHTTPDestination.java:323)

        at

org.apache.cxf.transport.http_jetty.JettyHTTPDestination.doService(JettyHTTPDestination.java:289)

        at

org.apache.cxf.transport.http_jetty.JettyHTTPHandler.handle(JettyHTTPHandler.java:72)

        at

org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:942)

        at

org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:878)

        at

org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)

        at

org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:250)

        at

org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110)

        at org.eclipse.jetty.server.Server.handle(Server.java:349)

        at

org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:441)

        at

org.eclipse.jetty.server.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:919)

        at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:582)

        at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:218)

        at

org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:52)

        at

org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:586)

        at

org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:44)

        at

org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:598)

        at

org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:533)

        at java.lang.Thread.run(Unknown Source)





However, if I return null instead of the empty list, no exception occurs and

the client receive the response.

In this case it has to be an empty body and HTTP status 204 - is what

the client is seeing when you return null.


I'd like to get the same behavior, returning an empty list.

Is it possible and how?

Do I use wrong annotations?


What exactly do you expect when you return an empty List<Integer> ?

Empty body & 204 ? Or actually a proper multipart/form-data payload

response with the root part containing some XML ?


FYI, JAXB provider will not handle List<Integer>, you will need to wrap

it into a bean or if you prefer returning List - then wrap Integer into

a bean


Cheers, Sergey



Thanks a lot,



Andrea









--

View this message in context: 
http://cxf.547215.n5.nabble.com/Rest-ws-how-to-return-an-empty-List-Integer-avoiding-java-lang-IndexOutOfBoundsException-tp5727816.html
Sent from the cxf-user mailing list archive at Nabble.com.





        
        
        
        

        

        
        
                If you reply to this email, your message will be added to the 
discussion below:
                
http://cxf.547215.n5.nabble.com/Rest-ws-how-to-return-an-empty-List-Integer-avoiding-java-lang-IndexOutOfBoundsException-tp5727816p5727818.html
        
        
                
                To unsubscribe from Rest ws: how to return an empty 
List<Integer> avoiding java.lang.IndexOutOfBoundsException, click here.

                NAML
                                                



--
View this message in context: 
http://cxf.547215.n5.nabble.com/Rest-ws-how-to-return-an-empty-List-Integer-avoiding-java-lang-IndexOutOfBoundsException-tp5727816p5727819.html
Sent from the cxf-user mailing list archive at Nabble.com.


Reply via email to