Hi Dan:

I did some debugging and I found that in the HTTPConduit class's
handleResponseInternal method, there is this condition

            if (isOneway(exchange) || isDecoupled()) {
                in = getPartialResponse(connection, responseCode);
                if (in == null) {
                    // oneway operation or decoupled MEP without 
                    // partial response
                    connection.getInputStream().close();
                    return;
                }
            } else {


    protected static InputStream getPartialResponse(
        HttpURLConnection connection,
        int responseCode
    ) throws IOException {
        InputStream in = null;
        if (responseCode == HttpURLConnection.HTTP_ACCEPTED
            || responseCode == HttpURLConnection.HTTP_OK) {
            if (connection.getContentLength() > 0) {
                in = connection.getInputStream();
            } else if (hasChunkedResponse(connection) 
                       || hasEofTerminatedResponse(connection)) {
                // ensure chunked or EOF-terminated response is non-empty
                in = getNonEmptyContent(connection);        
            }
        }
        return in;
    }


I think this is what is causing the SOAP Fault not being processed as it
closes the inputstream because the getPartialResponse only looks for OK
codes. The WS is a one-way service that does not define a SOAP Fault, but a
SOAP Fault is being returned. 

Let me know what you think


dkulp wrote:
> 
> 
> Not sure what could be the issue.....   Hmm....
> 
> What version of CXF and what JDK version are you using?
> 
>> sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnectio
>>n.java:885) at
>> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleRespons
>>e(HTTPConduit.java:1933
> 
> Those frames kind of concern me.   If the response code is 500, then 
> getErrorStream() should return non-null (since there is fault data) and
> thus 
> getInputStream() should not be called at all.     Is there some sort of
> proxy 
> or something that could be truncating the response?   
> 
> Dan
> 
> 
> 
> On Monday 27 October 2008 10:28:54 pm juan.velez wrote:
>> I have created a CXF WS Provider that returns a SOAP Fault when some
>> condition occurs. The WSDL does NOT declare the SOAP Fault. When I use
>> SOAP
>> UI to test the WS Provider and the condition occurs, I DO get the SOAP
>> Fault along with the HTTP 500 error:
>>
>> HTTP/1.1 500 Internal Server Error
>> Date: Tue, 28 Oct 2008 02:27:38 GMT
>> Content-Length: 199
>> Connection: close
>> Content-Type: text/xml;charset=UTF-8
>> Server: Apache-Coyote/1.1
>>
>> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/";>
>>    <soap:Body>
>>       <soap:Fault>
>>          <faultcode>soap:Client</faultcode>
>>          <faultstring>Juan</faultstring>
>>       </soap:Fault>
>>    </soap:Body>
>> </soap:Envelope>
>>
>>  However, when I create a CXF WS Client off the WSDL and execute it
>> against
>> the CXF WS Provider, I only get an IOException
>>
>> Oct 27, 2008 7:25:35 PM org.apache.cxf.phase.PhaseInterceptorChain
>> doIntercept
>> INFO: Interceptor has thrown exception, unwinding now
>> org.apache.cxf.interceptor.Fault: Could not send Message.
>>      at
>> org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInte
>>rceptor.handleMessage(MessageSenderInterceptor.java:64) at
>> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChai
>>n.java:221) at
>> org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:276) at
>> org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:222) at
>> org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73) at
>> org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:177)
>> at
>> $Proxy28.processExport(Unknown Source)
>>      at com.areva.mmi.wsdl.MMIService.main(MMIService.java:97)
>> Caused by: java.io.IOException: Server returned HTTP response code: 500
>> for
>> URL: http://localhost:8080/mmi/export
>>      at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
>>      at
>> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAcce
>>ssorImpl.java:39) at
>> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstru
>>ctorAccessorImpl.java:27) at
>> java.lang.reflect.Constructor.newInstance(Constructor.java:494) at
>> sun.net.www.protocol.http.HttpURLConnection$6.run(HttpURLConnection.java:12
>>02) at java.security.AccessController.doPrivileged(Native Method)
>>      at
>> sun.net.www.protocol.http.HttpURLConnection.getChainedException(HttpURLConn
>>ection.java:1196) at
>> sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnectio
>>n.java:885) at
>> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleRespons
>>e(HTTPConduit.java:1933) at
>> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPCon
>>duit.java:1824) at
>> org.apache.cxf.io.CacheAndWriteOutputStream.postClose(CacheAndWriteOutputSt
>>ream.java:47) at
>> org.apache.cxf.io.CachedOutputStream.close(CachedOutputStream.java:159)
>> at
>> org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:66)
>> at
>> org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:583) at
>> org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInte
>>rceptor.handleMessage(MessageSenderInterceptor.java:62) ... 7 more
>> Caused by: java.io.IOException: Server returned HTTP response code: 500
>> for
>> URL: http://localhost:8080/mmi/export
>>      at
>> sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnectio
>>n.java:1149) at
>> java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:367) at
>> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleRespons
>>e(HTTPConduit.java:1896) ... 13 more
>> javax.xml.ws.soap.SOAPFaultException: Could not send Message.
>>      at
>> org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:218)
>>      at $Proxy28.processExport(Unknown Source)
>>      at com.areva.mmi.wsdl.MMIService.main(MMIService.java:97)
>> Caused by: org.apache.cxf.interceptor.Fault: Could not send Message.
>>      at
>> org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInte
>>rceptor.handleMessage(MessageSenderInterceptor.java:64) at
>> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChai
>>n.java:221) at
>> org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:276) at
>> org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:222) at
>> org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73) at
>> org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:177)
>> ...
>> 2 more
>> Caused by: java.io.IOException: Server returned HTTP response code: 500
>> for
>> URL: http://localhost:8080/mmi/export
>>      at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
>>      at
>> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAcce
>>ssorImpl.java:39) at
>> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstru
>>ctorAccessorImpl.java:27) at
>> java.lang.reflect.Constructor.newInstance(Constructor.java:494) at
>> sun.net.www.protocol.http.HttpURLConnection$6.run(HttpURLConnection.java:12
>>02) at java.security.AccessController.doPrivileged(Native Method)
>>      at
>> sun.net.www.protocol.http.HttpURLConnection.getChainedException(HttpURLConn
>>ection.java:1196) at
>> sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnectio
>>n.java:885) at
>> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleRespons
>>e(HTTPConduit.java:1933) at
>> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPCon
>>duit.java:1824) at
>> org.apache.cxf.io.CacheAndWriteOutputStream.postClose(CacheAndWriteOutputSt
>>ream.java:47) at
>> org.apache.cxf.io.CachedOutputStream.close(CachedOutputStream.java:159)
>> at
>> org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:66)
>> at
>> org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:583) at
>> org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInte
>>rceptor.handleMessage(MessageSenderInterceptor.java:62) ... 7 more
>> Caused by: java.io.IOException: Server returned HTTP response code: 500
>> for
>> URL: http://localhost:8080/mmi/export
>>      at
>> sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnectio
>>n.java:1149) at
>> java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:367) at
>> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleRespons
>>e(HTTPConduit.java:1896) ... 13 more
>>
>>
>>  instead of the actual SOAP Fault Exception.  What am I doing wrong?
>>
>> Thanks,
>>
>> Juan
> 
> 
> 
> -- 
> Daniel Kulp
> [EMAIL PROTECTED]
> http://dankulp.com/blog
> 
> 

-- 
View this message in context: 
http://www.nabble.com/SOAP-Fault-not-being-received-by-CXF-WS-Client-tp20200422p20217975.html
Sent from the cxf-user mailing list archive at Nabble.com.

Reply via email to