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

Kai Rommel updated CXF-6863:
----------------------------
    Attachment: 0001-WS-RM-3.x-fix-for-retransmission-works-with-attachme.patch

Hello Aki,
find attached a patch file to solve the issue.

Kai

> WS-RM 3.x does not work with attachments upon a network error
> -------------------------------------------------------------
>
>                 Key: CXF-6863
>                 URL: https://issues.apache.org/jira/browse/CXF-6863
>             Project: CXF
>          Issue Type: Bug
>          Components: WS-* Components
>    Affects Versions: 3.1.3, 3.0.9
>            Reporter: Akitoshi Yoshida
>         Attachments: 
> 0001-WS-RM-3.x-fix-for-retransmission-works-with-attachme.patch
>
>
> When sending messages with an attachment, the CXF 3.x WS-RM code may lose 
> message at the client side when a network error occurs. This was working with 
> CXF 2.x WS-RM.
> This problem is related to the change CXF-4866 which changed the way how the 
> outgoing message is captured. Previously, the entire message was buffered and 
> captured, which isolated this capturing from network issue. In 3.x, only the 
> SOAP part is captured in this way and not the attachments. As a result, an 
> exception will be thrown during the attachment serialization when a network 
> error occurs and the message will not be correctly placed in the 
> retransmission queue.
> By comparing CXF 3.x and 2.x code, 
> In 3.x., AttachmentSerializer.writeProlog will directly writes to the IO and 
> this can trigger a Fault from AttachmentOutInterceptor.handleMessage.
> URLConnectionHTTPConduit$URLConnectionWrappedOutputStream(AbstractThresholdOutputStream).write(byte[],
>  int, int) line: 61     
> URLConnectionHTTPConduit$URLConnectionWrappedOutputStream(AbstractWrappedOutputStream).write(byte[])
>  line: 60 
> CacheAndWriteOutputStream.write(byte[]) line: 89      
> AttachmentSerializer.writeProlog() line: 182  
> AttachmentOutInterceptor.handleMessage(Message) line: 77      
> whereas in CXF 2.x, AttachmentSerializer.writeProlog will write to the 
> buffered WriteOnCloseOutputStream, as its RetransmissionInterceptor inserts 
> WriteOnCloseOutputStream to isolate itself from any network issue.
> WriteOnCloseOutputStream(CachedOutputStream).write(byte[]) line: 466  
> CacheAndWriteOutputStream.write(byte[]) line: 89      
> AttachmentSerializer.writeProlog() line: 172  
> AttachmentOutInterceptor.handleMessage(Message) line: 72      
> CXF 2.x, RetransmissionInterceptor inserted WriteOnCloseOutputStream to 
> capture the message entirely.
> There seem to be other issues with attachments handling in CXF 3.x. Along 
> with other issues CXF-6646, I am not sure how we should fix all these issues.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to