[ 
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

Reply via email to