You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Freeman Yue Fang (Jira)" <ji...@apache.org> on 2026/10/16 12:31:00 UTC

[jira] [Assigned] (CXF-8542) MTOM: Exceptions while reading the DataHandler's InputStream are not signaled to the client

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

Freeman Yue Fang reassigned CXF-8542:
-------------------------------------

    Assignee: Freeman Yue Fang

> MTOM: Exceptions while reading the DataHandler's InputStream are not signaled to the client
> -------------------------------------------------------------------------------------------
>
>                 Key: CXF-8542
>                 URL: https://issues.apache.org/jira/browse/CXF-8542
>             Project: CXF
>          Issue Type: Bug
>          Components: JAX-WS Runtime
>    Affects Versions: 3.4.3
>            Reporter: Joern Gebhardt
>            Assignee: Freeman Yue Fang
>            Priority: Major
>
> If the DataHandler's InputStream throws an exception while transferring the data to the client, the client gets no clue that it has received incomplete data. Instead, the client believes that it has received the full data.
>  I'd expect to get an exception while reading the {{InputStream}} from the {{DataHandler}}.
> Here's what happens on the server side:
>  The IOException is caught in the {{AttachmentOutEndingInterceptor}} that transforms it into an {{Fault}} runtime exception:
> {code:java}
> Interceptor for {http://example.com}MyWebService#{http://example.com/ws}GetBinaryData has thrown exception, unwinding now 
> org.apache.cxf.interceptor.Fault: Could not write attachments.
>     at org.apache.cxf.interceptor.AttachmentOutInterceptor$AttachmentOutEndingInterceptor.handleMessage(AttachmentOutInterceptor.java:123)
>     at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
>     at org.apache.cxf.interceptor.OutgoingChainInterceptor.handleMessage(OutgoingChainInterceptor.java:90)
>     at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
>     at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
> ...
> {code}
> This {{Fault}} is caught by the {{PhaseInterceptorChain}} which in turn returns {{false}} which is ignored by the {{ChainInitiationObserver}}. I.e. it seems to make no difference if the InputStream can be read correctly or if an exception is thrown while reading it.
> As I'm no CXF developer and cannot see the full picture I might be mistaken by my analysis. However, from the client's perspective the MTOM data seems to be correctly retrieved from the server which is not the case.
> Is there anything that can be done to make sure that the client receives an exception if the InputStream gets unexpectedly aborted on the server side?



--
This message was sent by Atlassian Jira
(v8.20.10#820010)