Currently, the root part of an XOP/MTOM message is always buffered in memory. However, in many cases, the entire root part is processed before any of the attachment parts are accessed. Therefore the root part should only be buffered if necessary, i.e. when an attachment part is accessed before the entire root part has been consumed. One way to achieve this is to use a DetachableInputStream. Note that DetachableInputStream always buffers the content in memory (and never on disk), but this is already the case for the root part (see the code in PartContentFactory).