[ 
https://issues.apache.org/jira/browse/CXF-3570?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Willem Jiang resolved CXF-3570.
-------------------------------

       Resolution: Duplicate
    Fix Version/s: 2.4.1

> HTTPConduit reads response before it completes sending request
> --------------------------------------------------------------
>
>                 Key: CXF-3570
>                 URL: https://issues.apache.org/jira/browse/CXF-3570
>             Project: CXF
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 2.4
>            Reporter: David Liu
>            Priority: Critical
>             Fix For: 2.4.1
>
>
> Hi,
>   In CXF 2.4, HTTP Conduit has a new debug log as below. However, this 
> logging message can cause HTTPConduit reads the  response before it completes 
> sending request, and it results in an IOException in the client side.
>   The reason is that the method *connection.getContentType()* will trigger 
> httpconnect to send current data to the HttpServer and want the server to 
> return the response, so the server thinks the client complete the whole 
> request and the server just reply nothing and closes the http connection.
> Code in HttpConduit.java
> {code}
>         protected void onFirstWrite() throws IOException {
>             ...            
>             if (LOG.isLoggable(Level.FINE)) {
>                 LOG.fine("Sending "
>                     + connection.getRequestMethod() 
>                     + " Message with Headers to " 
>                     + connection.getURL()
>                     + " Conduit :"
>                     + conduitName
>                     + "\nContent-Type: " + connection.getContentType() + 
> "\n");
>             }
>         }
> {code}
>   To reproduce the issue: please create a simple web service in cxf 2.4 and 
> enable its debug log, and then use a generated proxy client to call the http 
> service, then you can see the error below.
> David
> Exception:
> {code}
> Caused by: java.io.IOException: IOException invoking 
> http://localhost:7777/Hello: Stream is closed
>       at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
>       at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
>       at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown 
> Source)
>       at java.lang.reflect.Constructor.newInstance(Unknown Source)
>       at 
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.mapException(HTTPConduit.java:1385)
>       at 
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1370)
>       at 
> org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
>       at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:614)
>       at 
> org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
>       at 
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
>       at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:484)
>       at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:414)
>       at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:317)
>       at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:269)
>       at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
>       at 
> org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:124)
>       ... 2 more
> {code}

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to