[ https://issues.apache.org/jira/browse/CXF-5267?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13764710#comment-13764710 ]
Sergey Beryozkin commented on CXF-5267: --------------------------------------- Hi, thanks for doing a quick test - it does confirm it is a lower-level issue; I wonder if it is a well known issue ? I've done a quick search but did not find anything related. Please try an Apache HttpClient based conduit in the sync mode, add a "cxf-rt-transports-http-hc" module dependency and set a WebClient property, WebClient.getConfig(client).getRequestContext().put("use.async.http.conduit", Boolean.TRUE); that may help > WebClient using POST with chunking enabled (the default) can't read 401 error > response stream > --------------------------------------------------------------------------------------------- > > Key: CXF-5267 > URL: https://issues.apache.org/jira/browse/CXF-5267 > Project: CXF > Issue Type: Bug > Components: Core > Affects Versions: 2.5.3, 2.7.5 > Environment: Linux > Reporter: Jesse Pangburn > Priority: Minor > > If I use WebClient to POST a message to a server, then I can't read the 401 > error response stream. If I use GET, then I can read the response stream > just fine. If I use a HTTPConduit and disable chunking then I can read the > response content just fine in all cases. > Here's a short grid showing the tests I performed: > ||GET/POST||chunking||return code||result|| > |GET|disabled|401|response message ok| > |POST|disabled|401|response message ok| > |POST|enabled (default)|401|response message BLANK!| > |GET|enabled (default)|401|response message ok| > |POST|enabled (default)|200|response message ok| > Here's the code I'm using (requestStream and webClient are initialized above. > webClient is a WebClient and requestStream is an InputStream.): > {code:title=TestWSClient.java|borderStyle=solid} > String requestMethod = "POST"; > InputStream responseStream = null; > Response response = null; > try{ > responseStream = webClient.invoke(requestMethod, requestStream, > InputStream.class); > } catch (Exception e){ > logger.log(Level.WARNING, "caught exception using webClient to call " + > webClient.getCurrentURI().toString(), e); > }finally{ > // always assign the Response object > response = webClient.getResponse(); > // if the response entity is a LoadingByteArrayOutputStream, then we > can still grab that response content > try{ > Object entity = response.getEntity(); > if (entity instanceof ByteArrayInputStream){ > ByteArrayInputStream bais = > (ByteArrayInputStream)entity; > // the stream needs to be reset before we can really > use it > bais.reset(); > responseStream = bais; > } > }catch (Exception e){ > // darn, failed to get that response entity > logger.log(Level.WARNING, "tried to get response message despite > webClient exception, but failed", e); > // nothing else we can do, at least Cloverleaf will get the 500 > response code and error is in the log > } > } > {code} > In the failure case, when I try to read (not shown) from the response stream > I get a "-1" indicating the stream is empty. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira