Thank you Florian. That helped a lot.
I forgot to mention I'm most interested in Server and Bridge.

As reference for the interested reader: For SOAP this is implemented in 
org.apache.cxf.io.CachedOutputStream$TransferableFileInputStream.

Regarding the configuration: CXF properties from 
http://cxf.apache.org/docs/security.html#Security-Largedatastreamcaching are 
not working. Instead one uses session parameter bridge.memoryThreshold for the 
Bridge implementation, see 
https://chemistry.apache.org/java/javadoc/constant-values.html[https://chemistry.apache.org/java/javadoc/constant-values.html].

If I saw this correctly, then for the server this cannot be configured - 
instead you would override 
org.apache.chemistry.opencmis.commons.server.CmisServiceFactory.getMemoryThreshold().


Regarding the maximum allowed content size, it looks this cannot be configured 
at all for SOAP.
In 
org.apache.chemistry.opencmis.server.impl.webservices.CmisWebServicesServlet.loadBus(ServletConfig)
 I see in line 294:
    bus.setProperty("bus.io.CachedOutputStream.MaxSize", "-1");
I guess it should instead use the value, which is returned from 
org.apache.chemistry.opencmis.bridge.AbstractBridgeServiceFactory.getMaxContentSize().
That is used in 
org.apache.chemistry.opencmis.server.shared.TempStoreOutputStreamFactory.TempStoreOutputStreamFactory(CmisServiceFactory,
 String, HttpServletRequest), but I think that's not used for SOAP.


Andreas
 
 

--- original message ---

Hi Andreas,

SOAP messages are not streamed, they are buffered as well. Because CXF
is doing that, you will not find many traces in the OpenCMIS code. You
can configure the memory threshold and temp directory, though.

The Browser binding and the AtomPub binding support streaming without
buffering for createDocument (client), setContentStream (client +
server), getContentStream (client + server), appendContentStream
(client), and checkIn (client).

On the server side, streams have to be buffered because it is possible
that additional data is following the stream. The binary content is not
necessarily the last part of a multipart request. OpenCMIS (and
PortCMIS) always send it as the last part, but other CMIS clients (or
web browsers) might not.

setContentStream is an exception because it just sends the stream and
nothing else. Here unbuffered streaming is also supported on the server
side.


- Florian


> Hi,
>
> when using SOAP, then the content is fully streamed, i.e. no buffering in 
> memory or on hard disk.
> But when using Browser or Atom binding, then ThresholdOutputStream is 
> involved.
>
> Is there means to switch to full streaming? - I don't think so, when looking 
> into the source.
>
> The binary content is the last part of the multipart create request. Why 
> would it be necessary at all to buffer it?
>
> If this was already answered, please excuse. I searched the archive before, 
> but didn't find an answer.
>
> Thanks
>
> Andreas
>

Reply via email to