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>