[
https://issues.apache.org/jira/browse/AXIS2-2743?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12504744
]
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
format.setCharSetEncoding(OMOutputFormat.DEFAULT_CHAR_SET_ENCODING);
if (format.isOptimized()) {
bufferedSOAPBody = new StringWriter();
xmlWriter = StAXUtils.createXMLStreamWriter(bufferedSOAPBody);
} else {
xmlWriter = StAXUtils.createXMLStreamWriter(outStream,
format.getCharSetEncoding());
}
}
// line 415 in OMNodeImpl (makes the XMLStreamWriter a MTOMXMLStreamWriter)
public void serializeAndConsume(OutputStream output, OMOutputFormat format)
throws XMLStreamException {
MTOMXMLStreamWriter writer = new MTOMXMLStreamWriter(output, format);
internalSerializeAndConsume(writer);
writer.flush();
if (format.isAutoCloseWriter()) {
writer.close();
}
}
//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())
msgContext.setDoingMTOM(HTTPTransportUtils.doWriteMTOM(msgContext));
msgContext.setDoingSwA(HTTPTransportUtils.doWriteSwA(msgContext));
msgContext.setDoingREST(HTTPTransportUtils.isDoingREST(msgContext));
format.setSOAP11(msgContext.isSOAP11());
format.setDoOptimize(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(),
"text/xml; charset=" +
charSetEncoding);
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: https://issues.apache.org/jira/browse/AXIS2-2743
> Project: Axis 2.0 (Axis2)
> Issue Type: Bug
> Affects Versions: 1.2
> Environment: Windows XP
> Reporter: Tammy Dugan
> Assignee: Davanum Srinivas
> Attachments: services.xml, TestAxis2ReturnDataset.java
>
>
> 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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]