You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Colm O hEigeartaigh (JIRA)" <ji...@apache.org> on 2018/08/13 15:48:00 UTC

[jira] [Closed] (CXF-6254) Buffer Problem using CXF with NTLM Auth and SSL

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

Colm O hEigeartaigh closed CXF-6254.
------------------------------------

> Buffer Problem using CXF with NTLM Auth and SSL
> -----------------------------------------------
>
>                 Key: CXF-6254
>                 URL: https://issues.apache.org/jira/browse/CXF-6254
>             Project: CXF
>          Issue Type: Bug
>          Components: Transports
>    Affects Versions: 2.7.14
>            Reporter: Andreas Reinhardt
>            Priority: Minor
>             Fix For: 3.0.3
>
>         Attachments: log.txt
>
>
> I'm trying to connect to a sharepoint WSDL using a generated CXF client.
> While I've had my fun struggling with NTLM authentication (I wasn't using the async-client before!) I'm confronted with a new problem.
> I want to upload a binary file using the copy.wsdl from sharepoint which is working fine with files approximately smaller than 16kbyte (using SSL & NTLM)...
> Using larger files with about ~500kbyte cxf blocks at HttpConduit.handleRetrasmits() (first line at getHttpResponse()), coming from AsyncHttpConduit.updateCookiesBeforeRetransmit().
> I tried increasing the buffers to an insanely amount like
> {code}
> Bus bus = BusFactory.getDefaultBus();
> bus.setProperty("bus.io.CachedOutputStream.Threshold", String.valueOf(1024 * 1024 * 128));
> conduit.getClient().setChunkLength(1024 * 1024 * 128);
> {code}
> altough chunking is disabled - the buffer size comes from that configuration (AsyncHttpConduit line 266):
> {code}
> int bufSize = csPolicy.getChunkLength() > 0 ? csPolicy.getChunkLength() : 16320;
> inbuf = new SharedInputBuffer(bufSize, allocator);
> outbuf = new SharedOutputBuffer(bufSize, allocator);
> {code}
> but after that I got http code 400 (invalid request) from the sharepoint server if the file was larger than those pesky ~16kbyte...
> using the highest loglevel I noticed that in the 1st retransmission the buffer is now always sending the same first ~16kbyte to the sslcontext...
> That's all happening in CxfHttpAsyncRequestProducer.produceContent() and as far as I can tell it's happening because the buffer is always resettet in line 82 at buffer.rewind().
> {code}
> public void produceContent(final ContentEncoder enc, final IOControl ioc) throws IOException {
>         if (content != null) {
>             if (buffer == null) {
>                 if (content.getTempFile() == null) {
>                     buffer = ByteBuffer.wrap(content.getBytes());
>                 } else {
>                     fis = content.getInputStream();
>                     chan = (fis instanceof FileInputStream) 
>                         ? ((FileInputStream)fis).getChannel() : Channels.newChannel(fis);
>                     buffer = ByteBuffer.allocate(8 * 1024);
>                 }
>             }
>             int i = -1;
>             buffer.rewind();
>             if (buffer.hasRemaining() && chan != null) {
>                 i = chan.read(buffer);
>                 buffer.flip();
>             }
>             enc.write(buffer);
>             if (!buffer.hasRemaining() && i == -1) {
>                 enc.complete();
>             }
>         } else {
>             buf.produceContent(enc, ioc);
>         }
>     }
> {code}
> So I guess something is either terribly wrong at my setup or there might be a bug here...



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