[ 
https://issues.apache.org/jira/browse/CXF-6863?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15318394#comment-15318394
 ] 

Dennis Sosnoski commented on CXF-6863:
--------------------------------------

Serializing and capturing the entire message as it's being sent breaks the 
WS-Security handling of the message, since it means among other things that 
timestamps are fixed at the time of original message transmission. Even WS-RM 
is messed up with this approach, since it also means that acknowledgement 
information is resent. This can lead to invalid protocol states.

What should be happening in this case is that the attachments should each be 
captured and stored separately from the main message body so they can be 
reprocessed along with the main message body when a retransmit is needed. I had 
put some code in for this purpose, but I don't think I ever got it completed 
and working correctly.

I don't have time to participate on CXF now, though, so it's up to you on the 
team what you want to do.

> 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
>            Assignee: 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