Thanks Sergey . Can you please release a patch for this fix.
On Wed, Aug 16, 2017 at 3:37 PM, Sergey Beryozkin [via CXF] < [email protected]> wrote: > Yes, I see "response.stream.auto.close" does not work if you do > something like > > webCliemt.get(Book.class) > > but does work if you do > > webCliemt.get().readEntity(Book.class) > > I recall now I might've implemented this property while working on > JAX-RS 2.0 impl of Response which talks about this auto-closing in its > docs, while the usage of this property in a case where response is read > implicitly was not taken care of > > So if you'd do to continue doing the auto-closing just follow > > webCliemt.get().readEntity(Book.class) pattern > > in meantime I'll have a look at this property working in a > > webCliemt.get(Book.class) > > Sergey > > On 16/08/17 23:04, sbalustar wrote: > > > Sergey , > > > > In CXF 2.7.7, in readBody method, there is no call for readEntity, thats > > why it is not throwing any exception . But in 3.1.8 , first readEntity > > method is called and later getEntity method is called. Seems like it > is > > Bug in AbstractClient.java in 3.1.8 version. What do you say? > > > > On Wed, Aug 16, 2017 at 2:51 PM, Balakrishna Sudabathula < > > [hidden email] <http:///user/SendEmail.jtp?type=node&node=5782765&i=0>> > wrote: > > > >> readBody method code () > >> > >> protected <T> T readBody(Response r, Message outMessage, Class<T> > cls, > >> > >> > >> Type type, Annotation[] anns) { > >> > >> > >> > >> if (cls == Response.class) { > >> > >> return cls.cast(r); > >> > >> } > >> > >> > >> > >> int status = r.getStatus(); > >> > >> if ((status < 200 || status == 204) && r.getLength() <= 0 || > >> status >= 300) { > >> > >> return null; > >> > >> } > >> > >> return ((ResponseImpl)r).doReadEntity(cls, type, anns); > >> > >> > >> } > >> > >> On Wed, Aug 16, 2017 at 2:48 PM, Balakrishna Sudabathula < > >> [hidden email] <http:///user/SendEmail.jtp?type=node&node=5782765&i=1>> > wrote: > >> > >>> Please find the attachement. In WebClient handle handleResponse () > method > >>> there is method call readBody (), in that method readEntity method is > >>> called. After that there is another method call > JAXRSUtils.fromRespons > >>> which is calling getEntity method > >>> > >>> > >>> > >>> On Wed, Aug 16, 2017 at 2:29 PM, Sergey Beryozkin [via CXF] < > >>> [hidden email] <http:///user/SendEmail.jtp?type=node&node=5782765&i=2>> > wrote: > >>> > >>>> So where is readEntity is called from ? > >>>> On 16/08/17 22:26, sbalustar wrote: > >>>> > >>>>> In CXF 3.1.8 > >>>>> > >>>>> There is a call in readEntity menthod autoClose(), but in cxf 2.7.7 > >>>> there > >>>>> is no such method call. > >>>>> > >>>>> protected void autoClose(Class<?> cls, boolean exception) { > >>>>> > >>>>> if (!entityBufferred && cls != InputStream.class > >>>>> > >>>>> && (exception || MessageUtils.isTrue(outMessage > >>>>> .getContextualProperty("response.stream.auto.close")))) { > >>>>> > >>>>> close(); > >>>>> > >>>>> } > >>>>> > >>>>> } > >>>>> > >>>>> > >>>>> If the auto close is set to true , then it is calling close method , > >>>> and > >>>>> changing the entityClosed value to true. > >>>>> > >>>>> > >>>>> > >>>>> On Wed, Aug 16, 2017 at 2:18 PM, Balakrishna Sudabathula < > >>>>> [hidden email] <http:///user/SendEmail.jtp? > type=node&node=5782761&i=0>> > >>>> wrote: > >>>>> > >>>>>> Why because IN CXF 3.1.8 , The Code in the ResponseImpl class is > like > >>>> below > >>>>>> > >>>>>> > >>>>>> public Object getEntity() { > >>>>>> return InjectionUtils.getEntity(getActualEntity()); > >>>>>> } > >>>>>> > >>>>>> > >>>>>> public Object getActualEntity() { > >>>>>> checkEntityIsClosed(); > >>>>>> return lastEntity != null ? lastEntity : entity; > >>>>>> } > >>>>>> > >>>>>> private void checkEntityIsClosed() { > >>>>>> > >>>>>> if (entityClosed) { > >>>>>> > >>>>>> throw new IllegalStateException("Entity is not > >>>> available"); > >>>>>> > >>>>>> } > >>>>>> > >>>>>> } > >>>>>> > >>>>>> > >>>>>> public void close() throws ProcessingException { > >>>>>> > >>>>>> if (!entityClosed) { > >>>>>> > >>>>>> if (!entityBufferred && entity instanceof > InputStream) { > >>>>>> > >>>>>> try { > >>>>>> > >>>>>> ((InputStream)entity).close(); > >>>>>> > >>>>>> } catch (IOException ex) { > >>>>>> > >>>>>> throw new ResponseProcessingException(this, > >>>> ex); > >>>>>> > >>>>>> } > >>>>>> > >>>>>> } > >>>>>> > >>>>>> entity = null; > >>>>>> > >>>>>> entityClosed = true; > >>>>>> > >>>>>> } > >>>>>> > >>>>>> > >>>>>> > >>>>>> } > >>>>>> In the readEntity method, there is a call to close() method which > the > >>>>>> entityClosed variable value is set to true. When calling the > >>>> getEntity() > >>>>>> method , there is a another method call checkEntityIsClosed is > >>>> throwing the > >>>>>> exception because the entityClosed is set to true in readEntity. > >>>>>> > >>>>>> > >>>>>> But In CXF 2.7.7, there is no method call in the getEntity() > method > >>>> , > >>>>>> simply it returns the entity > >>>>>> > >>>>>> public Object getEntity() { > >>>>>> return lastEntity != null ? lastEntity : entity; > >>>>>> } > >>>>>> > >>>>>> > >>>>>> On Wed, Aug 16, 2017 at 1:58 PM, Sergey Beryozkin [via CXF] < > >>>>>> [hidden email] > >>>> <http:///user/SendEmail.jtp?type=node&node=5782761&i=1>> wrote: > >>>>>> > >>>>>>> Hi, that will need to be measured for a concrete flow. > >>>>>>> I'm still not sure why you are seeing the failure with the auto > >>>> close > >>>>>>> being on - it only takes effect after the entity has been > >>>> consumed... > >>>>>>> > >>>>>>> Sergey > >>>>>>> On 16/08/17 19:03, sbalustar wrote: > >>>>>>> > >>>>>>>> Hi Sergey, > >>>>>>>> > >>>>>>>> At runtime, in Debug mode Changed the > >>>>>>> response.stream.auto.close=false. > >>>>>>>> Later on , i am not facing the Entity Not available Exception. > >>>>>>>> > >>>>>>>> Is there any impact on the performance when we disabled the > >>>> flag? > >>>>>>>> > >>>>>>>> On Wed, Aug 16, 2017 at 3:32 AM, Sergey Beryozkin [via CXF] < > >>>>>>>> [hidden email] <http:///user/SendEmail.jtp?ty > >>>> pe=node&node=5782757&i=0>> > >>>>>>> wrote: > >>>>>>>> > >>>>>>>>> Hi > >>>>>>>>> > >>>>>>>>> I don't quite understand what the issue is, does it happen when > >>>> you > >>>>>>>>> enable "response.stream.auto.close" ? If yes - what happens if > you > >>>> do > >>>>>>>>> not enable this property ? > >>>>>>>>> > >>>>>>>>> CXF does not auto-close the input stream by default given of the > >>>> few > >>>>>>>>> well-known side-effects. > >>>>>>>>> > >>>>>>>>> Given you have already tried to debug - it is better to set a > >>>>>>> breakpoint > >>>>>>>>> inside org.apache.cxf.jaxrs.impl.ResponseImpl - there you will > >>>> see > >>>>>>> why > >>>>>>>>> InputStream is not available in your case > >>>>>>>>> > >>>>>>>>> Cheers, Sergey > >>>>>>>>> > >>>>>>>>> On 15/08/17 23:20, sbalustar wrote: > >>>>>>>>> > >>>>>>>>>> HI sergey, We are upgrading CXF version 2.7.7 to 3.1.8 and > facing > >>>> the > >>>>>>>>> below > >>>>>>>>>> issue. > >>>>>>>>>> > >>>>>>>>>> AUDIT:2017-08-15 11:31:11.047:localhost-startStop-1:"Caused by > >>>>>>>>>> javax.ws.rs.ProcessingException: java.lang.IllegalStateException: > > >>>> > >>>>>>>>> Entity is > >>>>>>>>>> not available > >>>>>>>>>> at > >>>>>>>>>> org.apache.cxf.jaxrs.client.WebClient.handleResponse(WebClient.java:1141) > > >>>> > >>>>>>> > >>>>>>>>> > >>>>>>>>>> at org.apache.cxf.jaxrs.client.We > >>>> bClient.doResponse(WebClient.java:1110) > >>>>>>> > >>>>>>>>> > >>>>>>>>>> at > >>>>>>>>>> org.apache.cxf.jaxrs.client.WebClient.doChainedInvocation(WebClient.java:1035) > > >>>> > >>>>>>> > >>>>>>>>> > >>>>>>>>>> at org.apache.cxf.jaxrs.client.We > >>>> bClient.doInvoke(WebClient.java:892) > >>>>>>> > >>>>>>>>> > >>>>>>>>>> at org.apache.cxf.jaxrs.client.We > >>>> bClient.doInvoke(WebClient.java:863) > >>>>>>> > >>>>>>>>> > >>>>>>>>>> at org.apache.cxf.jaxrs.client.We > >>>> bClient.invoke(WebClient.java:413) > >>>>>>> > >>>>>>>>> > >>>>>>>>>> at > >>>>>>>>>> com.walmart.platform.soa.client.RestClient.invoke(RestClient.java:261) > > >>>> > >>>>>>> > >>>>>>>>>> ... 78 more > >>>>>>>>>> > >>>>>>>>>> I have gone through this ticket > >>>>>>>>>> https://issues.apache.org/jira/browse/CXF-5144 which you > >>>> mentioned > >>>>>>> that > >>>>>>>>> Set > >>>>>>>>>> this property: "response.stream.auto.close" to true. This is > done > >>>>>>> even > >>>>>>>>>> though we are getting the same issue. > >>>>>>>>>> > >>>>>>>>>> When i debug the code, in WebClient.invoke method this > exception > >>>> is > >>>>>>>>> occured. > >>>>>>>>>> > >>>>>>>>>> protected Response handleResponse(Message outMessage, > >>>> Class<?> > >>>>>>>>>> responseClass, Type genericType) { > >>>>>>>>>> try { > >>>>>>>>>> ResponseBuilder rb = > >>>> setResponseBuilder(outMessage, > >>>>>>>>>> outMessage.getExchange()); > >>>>>>>>>> Response currentResponse = rb.clone().build(); > >>>>>>>>>> > >>>>>>>>>> ((ResponseImpl)currentResponse).setOutMessage(outMessage); > > >>>> > >>>>>>> > >>>>>>>>>> > >>>>>>>>>> Object entity = readBody(currentResponse, > >>>> outMessage, > >>>>>>>>>> responseClass, genericType, > >>>>>>>>>> new Annotation[]{}); > >>>>>>>>>> > >>>>>>>>>> if (entity == null) { > >>>>>>>>>> int status = currentResponse.getStatus(); > >>>>>>>>>> if (status >= 400) { > >>>>>>>>>> entity = currentResponse.getEntity(); > >>>>>>>>>> } > >>>>>>>>>> } > >>>>>>>>>> rb = JAXRSUtils.fromResponse(currentResponse); > >>>>>>>>>> > >>>>>>>>>> rb.entity(entity instanceof Response > >>>>>>>>>> ? ((Response)entity).getEntity() : > >>>> entity); > >>>>>>>>>> > >>>>>>>>>> Response r = rb.build(); > >>>>>>>>>> getState().setResponse(r); > >>>>>>>>>> ((ResponseImpl)r).setOutMessage(outMessage); > >>>>>>>>>> return r; > >>>>>>>>>> } catch (Throwable ex) { > >>>>>>>>>> throw (ex instanceof ProcessingException) ? > >>>>>>>>>> (ProcessingException)ex > >>>>>>>>>> : new > >>>>>>>>>> ProcessingException(ex); > >>>>>>>>>> } finally { > >>>>>>>>>> > >>>>>>>>>> ClientProviderFactory.getInstance(outMessage).clearThreadLocalProxies(); > > >>>> > >>>>>>> > >>>>>>>>> > >>>>>>>>>> } > >>>>>>>>>> } > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> public static ResponseBuilder fromResponse(Response > >>>> response) { > >>>>>>>>>> ResponseBuilder rb = > >>>>>>>>>> toResponseBuilder(response.getStatus()); > > >>>> > >>>>>>> > >>>>>>>>>> * rb.entity(response.getEntity()); > >>>>>>>>>> * for (Map.Entry<String, List<Object>> entry : > >>>>>>>>>> response.getMetadata().entrySet()) { > >>>>>>>>>> List values = entry.getValue(); > >>>>>>>>>> for (Object value : values) { > >>>>>>>>>> rb.header(entry.getKey(), value); > >>>>>>>>>> } > >>>>>>>>>> } > >>>>>>>>>> return rb; > >>>>>>>>>> } > >>>>>>>>>> > >>>>>>>>>> * rb.entity(response.getEntity()); > >>>>>>>>>> * seems like , entity is null in ResponseBuilder rb from the > >>>>>>>>> fromResponse > >>>>>>>>>> method. > >>>>>>>>>> > >>>>>>>>>> Please let me know, what could be the solution to fix this > issue? > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> -- > >>>>>>>>>> View this message in context: http://cxf.547215.n5.nabble. > >>>>>>>>> com/Closing-of-WebClient-and-Response-objects-tp5748134p5782716.html > > >>>> > >>>>>>>>>> Sent from the cxf-user mailing list archive at Nabble.com. > >>>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> -- > >>>>>>>>> Sergey Beryozkin > >>>>>>>>> > >>>>>>>>> Talend Community Coders > >>>>>>>>> http://coders.talend.com/ > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> ------------------------------ > >>>>>>>>> If you reply to this email, your message will be added to the > >>>>>>> discussion > >>>>>>>>> below: > >>>>>>>>> http://cxf.547215.n5.nabble.com/Closing-of-WebClient-and-Res > >>>>>>> ponse-objects- > >>>>>>>>> tp5748134p5782725.html > >>>>>>>>> To unsubscribe from Closing of WebClient and Response objects, > >>>> click > >>>>>>> here > >>>>>>>>> < > >>>>>>>>> . > >>>>>>>>> NAML > >>>>>>>>> <http://cxf.547215.n5.nabble.com/template/NamlServlet.jtp?ma > >>>>>>> cro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base= > >>>>>>> nabble.naml.namespaces.BasicNamespace-nabble.view.web. > >>>>>>> template.NabbleNamespace-nabble.view.web.template.NodeNamesp > >>>>>>> ace&breadcrumbs=notify_subscribers%21nabble%3Aemail. > >>>>>>> naml-instant_emails%21nabble%3Aemail.naml-send_instant_ > >>>>>>> email%21nabble%3Aemail.naml> > >>>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> -- > >>>>>>>> View this message in context: http://cxf.547215.n5.nabble.co > >>>>>>> m/Closing-of-WebClient-and-Response-objects-tp5748134p5782748.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/Closing-of-WebClient-and-Res > >>>>>>> ponse-objects-tp5748134p5782757.html > >>>>>>> To unsubscribe from Closing of WebClient and Response objects, > click > >>>> here > >>>>>>> < > >>>>>>> . > >>>>>>> NAML > >>>>>>> <http://cxf.547215.n5.nabble.com/template/NamlServlet.jtp?ma > >>>> cro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base= > >>>> nabble.naml.namespaces.BasicNamespace-nabble.view.web.templa > >>>> te.NabbleNamespace-nabble.view.web.template.NodeNamespac > >>>> e&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml- > >>>> instant_emails%21nabble%3Aemail.naml-send_instant_email% > >>>> 21nabble%3Aemail.naml> > >>>>>>> > >>>>>> > >>>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> -- > >>>>> View this message in context: http://cxf.547215.n5.nabble.co > >>>> m/Closing-of-WebClient-and-Response-objects-tp5748134p5782759.html > >>>>> Sent from the cxf-user mailing list archive at Nabble.com. > >>>>> > >>>> > >>>> > >>>> -- > >>>> Sergey Beryozkin > >>>> > >>>> Talend Community Coders > >>>> http://coders.talend.com/ > >>>> > >>>> > >>>> ------------------------------ > >>>> If you reply to this email, your message will be added to the > discussion > >>>> below: > >>>> http://cxf.547215.n5.nabble.com/Closing-of-WebClient-and-Res > >>>> ponse-objects-tp5748134p5782761.html > >>>> To unsubscribe from Closing of WebClient and Response objects, click > >>>> here > >>>> < > >>>> . > >>>> NAML > >>>> <http://cxf.547215.n5.nabble.com/template/NamlServlet.jtp? > macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml& > base=nabble.naml.namespaces.BasicNamespace-nabble.view. > web.template.NabbleNamespace-nabble.view.web.template. > NodeNamespace&breadcrumbs=notify_subscribers%21nabble% > 3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_ > instant_email%21nabble%3Aemail.naml> > >>>> > >>> > >>> > >> > > > > > > > > > > -- > > View this message in context: http://cxf.547215.n5.nabble. > com/Closing-of-WebClient-and-Response-objects-tp5748134p5782764.html > > Sent from the cxf-user mailing list archive at Nabble.com. > > > > > -- > Sergey Beryozkin > > Talend Community Coders > http://coders.talend.com/ > > > ------------------------------ > If you reply to this email, your message will be added to the discussion > below: > http://cxf.547215.n5.nabble.com/Closing-of-WebClient-and-Response-objects- > tp5748134p5782765.html > To unsubscribe from Closing of WebClient and Response objects, click here > <http://cxf.547215.n5.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=5748134&code=YnN1ZGFiYXRodWxhQGdtYWlsLmNvbXw1NzQ4MTM0fDEyODI4MTYwNTM=> > . > NAML > <http://cxf.547215.n5.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml> > -- View this message in context: http://cxf.547215.n5.nabble.com/Closing-of-WebClient-and-Response-objects-tp5748134p5782766.html Sent from the cxf-user mailing list archive at Nabble.com.
