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 <
[email protected]> 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] <
> [email protected]> 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-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
>> <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-tp5748134p5782759.html
Sent from the cxf-user mailing list archive at Nabble.com.