Hi
On 17/05/13 16:49, eanbiso wrote:



Thanks for the explanation.
Another solution could be this?
..use the exception handler to map the exception and, in case of 
java.lang.IndexOutOfBoundsException, return a Response.Status.NO_CONTENT ?

     public Response toResponse(Exception arg0) {
         if(CHECK EXCEPTION TYPE){
             ResponseBuilder builder = 
Response.status(Response.Status.NO_CONTENT);
             return builder.build();
         }
     }

Should it work?

It should as a workaround because ultimately we are dealing with a runtime bug. FYI, in your case, stating that it multipart/form-date and given that no provider is available for a root part representing List<Integer>, it really has to be HTTP 500 error - this is something I'll need to fix, reporting IndexOutOfBoundsException is really a bug :-)

Thanks, Sergey

Andrea


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



        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: [hidden email]

To: [hidden email]

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.





        
        
        
        

        

        
        
                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-tp5727816p5727820.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-tp5727816p5727856.html
Sent from the cxf-user mailing list archive at Nabble.com.



--
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com

Reply via email to