Hi,

Just to be sure that proposed improvement makes sense and has no drawbacks.

use case: Dispatch client sends stream message to remote Web Service using 
following code:

final Dispatch<StaxSource> dispatch = service.createDispatch(PORT_NAME,
             StaxSource.class, Service.Mode.MESSAGE);
final StaxSource response = dispatch.invoke(request);

In case if remote service is just not available, code throws following 
SoapFault:
org.apache.cxf.binding.soap.SoapFault: Problem writing SAAJ model to stream
        at 
org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor$SAAJOutEndingInterceptor.ha
ndleMessage(SAAJOutInterceptor.java:214)[132:org.apache.cxf.bundle:2.4.2]
        at 
org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor$SAAJOutEndingInterceptor.ha
ndleMessage(SAAJOutInterceptor.java:170)[132:org.apache.cxf.bundle:2.4.2]
        at 
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.ja
va:263)[132:org.apache.cxf.bundle:2.4.2]

To be honest, the error message is quite confusing, I expect "Connection 
refused" exception here.

The wrapped Exception is available:
Caused by: com.ctc.wstx.exc.WstxIOException: Connection refused: connect
        at com.ctc.wstx.sw.BaseStreamWriter.flush(BaseStreamWriter.java:257)

Question: does it make sense to explicitly check for connection refused case in 
SAAJOutInterceptor (XMLStreamWriter.flush()) and provide more understandable 
message for the user?  I guess this error happens quite often by the web 
applications.
If yes, I am going to create Jira issue and provide a patch.

Regards,
Andrei.

Reply via email to