Sergey, Did you get any chance to open a ticket on this issue? This is a blocker for us.
On Thu, Aug 17, 2017 at 11:36 AM Balakrishna Sudabathula < [email protected]> wrote: > Sergey, > > We have not created any client from our side. We are using jar file in > our project which is developed by some other team was implemented this > functionality. But in CXF 3.1.8 WebClient, handleResponse method first it > is calling readEntity which it is closing the entity and later calling > getEntity which is checking the entity is closed or not. If it is closed , > Entity is not available Exception is throwing. > > > On Thu, Aug 17, 2017 at 12:15 AM, Jose María Zaragoza [via CXF] < > [email protected]> wrote: > >> 2017-08-16 23:18 GMT+02:00 sbalustar <[hidden email] >> <http:///user/SendEmail.jtp?type=node&node=5782769&i=0>>: >> >> > 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; >> > >> > } >> > >> > >> > >> > } >> >> >> >> Hi: >> >> Sorry for this semi-offtopic, but there is something I don't understand >> >> I thought that Response.close() method performed a close in InputStream >> object >> associated to the underlying HttpURLConnection object. >> >> But I see that Response.close() only closes entity **if entity is an >> InputStream** >> The beginning of the thread was about if it was necessary to close >> Response instance explicitly. >> >> What about if I do >> >> Book book = response.readEntity(Book.class) >> >> ? >> >> Should I close the response object ? >> I see that autoclose() only is called if class is not InputStream , >> but close() required that entity be InputStream >> >> I know I'm loosing something ( maybe mixing concepts ) >> >> Regards >> >> >> > 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=5782769&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?type=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.WebClient.doResponse(WebClient.java:1110) >> >> >> >> >> >> >> >>> at >> >> >>> >> org.apache.cxf.jaxrs.client.WebClient.doChainedInvocation(WebClient.java:1035) >> >> >> >> >> >> >> >> >>> at >> org.apache.cxf.jaxrs.client.WebClient.doInvoke(WebClient.java:892) >> >> >> >> >> >> >> >>> at >> org.apache.cxf.jaxrs.client.WebClient.doInvoke(WebClient.java:863) >> >> >> >> >> >> >> >>> at >> org.apache.cxf.jaxrs.client.WebClient.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- >> >> Response-objects- >> >> >> tp5748134p5782725.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-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-Response-objects- >> >> tp5748134p5782757.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-tp5748134p5782758.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-Response-objects-tp5748134p5782769.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-tp5748134p5782871.html Sent from the cxf-user mailing list archive at Nabble.com.
