Uwe Ryssel created CXF-7684:
-------------------------------

             Summary: Base64 encoding in AttachmentSerializer does not create 
correct output for large attachments
                 Key: CXF-7684
                 URL: https://issues.apache.org/jira/browse/CXF-7684
             Project: CXF
          Issue Type: Bug
          Components: Core
    Affects Versions: 3.0.16
            Reporter: Uwe Ryssel


As client, I want to send a SOAP message with base64-encoded attachments. I 
have activated base64 encoding for attachments by adding an out interceptor, 
which sets the message parameter 
org.apache.cxf.message.Message.CONTENT_TRANSFER_ENCODING to "base64", since it 
is supported by the CXF-core's AttachmentSerializer.

For small attachments, the encoding works. But when I have a large attachment, 
the base64-encoded data is, I think, not valid:

As implemented in AttachmentSerializer's method encodeBase64(), the encoding of 
the input data is done in blocks of maximum 262144 bytes. Since 262144 divided 
by 3 has remainder 1, each of the blocks containing the full 262144 bytes will 
generate two '=' padding characters at the end of the block output.

So for large attachments with > 262144 bytes, the created base64 data stream 
contains padding characters within the stream, and not only at the end. I did 
not find any hint, that this is allowed.

Especially the server implementation, which I use, interprets the padding 
characters also as end of stream, so that attachments > 262144 do not work in 
that case.

An fix for this issue would be to use a buffer size, which is divisible by 
three without remainder.

I still use CXF 3.0.16, since the client have to work with Java 1.6. But 3.1.x 
and 3.2.x use the same method, so the same issue should apply there too.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to