axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Tammy Dugan (JIRA)" <>
Subject [jira] Commented: (AXIS2-2743) OutOfMemory error returning large xml
Date Thu, 14 Jun 2007 13:58:27 GMT


Tammy Dugan commented on AXIS2-2743:

I traced through the code and this is what I found:

// line 59 in MTOMXMLStreamWriter (format.isOptimized buffers all the output xml in a StringWriter)
public MTOMXMLStreamWriter(OutputStream outStream, OMOutputFormat format)
            throws XMLStreamException, FactoryConfigurationError {
        this.format = format;
        this.outStream = outStream;

        if (format.getCharSetEncoding() == null) //Default encoding is UTF-8

        if (format.isOptimized()) {
            bufferedSOAPBody = new StringWriter();
            xmlWriter = StAXUtils.createXMLStreamWriter(bufferedSOAPBody);
        } else {
            xmlWriter = StAXUtils.createXMLStreamWriter(outStream,

// line 415 in OMNodeImpl (makes the XMLStreamWriter a MTOMXMLStreamWriter)

 public void serializeAndConsume(OutputStream output, OMOutputFormat format)
            throws XMLStreamException {
        MTOMXMLStreamWriter writer = new MTOMXMLStreamWriter(output, format);
        if (format.isAutoCloseWriter()) {

//line 140 CommonsHTTPTransportSender (sets format.doOptimize to true since I'm using MTOM
public InvocationResponse invoke(MessageContext msgContext)
            throws AxisFault {
        try {
            OMOutputFormat format = new OMOutputFormat();
            // if (!msgContext.isDoingMTOM())

//line 41 of MIMEOutputUtils (the writer.toString() causes the output of memory error
public static void complete(OutputStream outStream,
                                StringWriter writer, LinkedList binaryNodeList,
                                String boundary, String contentId, String charSetEncoding,
                                String SOAPContentType) {
        try {
            startWritingMime(outStream, boundary);

            javax.activation.DataHandler dh = new javax.activation.DataHandler(writer.toString(),
charset=" +

Why does it have to buffer all the xml to use MTOM? Can I turn off the optimization and still
use MTOM? Wouldn't it work to stream the body xml and buffer the attachments so the attachments
can be optimized?

> OutOfMemory error returning large xml
> -------------------------------------
>                 Key: AXIS2-2743
>                 URL:
>             Project: Axis 2.0 (Axis2)
>          Issue Type: Bug
>    Affects Versions: 1.2
>         Environment: Windows XP
>            Reporter: Tammy Dugan
>            Assignee: Davanum Srinivas
>         Attachments: services.xml,
> When I try to return 270 MB of xml from an axis2 service, I get an OutOfMemory error.
I wrote my own CustomDataSource and the error occurs in the following serialize method:
> public void serialize(XMLStreamWriter xmlWriter) throws XMLStreamException
> 	{
> 		XMLStreamReader reader = null;
> 		StreamingOMSerializer serializer = new StreamingOMSerializer();
> 		reader = getReader();
> 		System.out.println("before out of memory error");
> 		serializer.serialize(reader, xmlWriter);// OutOfMemory error here
> 		System.out.println("after out of memory error");
> 		xmlWriter.flush();
> 	}
> If I run the serialize locally and create my own xmlWriter, there is no error. However,
if the serialize gets called from an axis2 service, an OutOfMemory error occurs. Because of
this, I really think that axis2 is using a writer as input to XMLStreamWriter that is buffering
all the data. It shouldn't be doing that.

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message