Skip to main content

JAX-WS SoapHandler with large messages: OutOfMemoryError

Please note these forums are being decommissioned and use the new and improved forums at
No replies
Joined: 2007-03-15

Using JAX-WS 2, I see an issue that others have spoken about as well. The issue is that if a SOAP message is received inside a handler, and that SOAP message is large - whether due to inline SOAP body elements that happen to have lots of content, or due to MTOM attachments - then it is dangerously easy to get an OutOfMemoryError.

The reason is that the call to getMessage() seems to set off a chain of events that involve reading the entire SOAP message on the wire, and creating an object (or objects) representing what was on the wire.

For example:

public boolean handleMessage(SOAPMessageContext context)
    // for a large message, this will cause an OutOfMemoryError
    System.out.println( context.getMessage().countAttachments() );

My question is: is there a known mechanism/workaround for dealing with this? Specifically, it would be nice to access the SOAP part in a SOAP message without forcing the attachments (if MTOM for example) to also be vacuumed up.