Я использую apache poi 4.0.0 с Java 8 и пытаюсь заполнить шаблон данными и сохранить его в выходном потоке.Это вызывает проблему при записи книги в путь назначения, но только при работе в режиме отладки / на других компьютерах.Файл шаблона имеет размер 7,5 МБ, прежде чем заполнять его данными
Я отладил его и обнаружил, что вызов метода worksheet.save(out, xmlOptions);
в XSSFSheet
останавливается в какой-то момент.
Значения отладки для out
:
class: org.apache.poi.openxml4j.opc.internal.MemoryPackagePartOutputStream
part: Name: /xl/worksheets/sheet10.xml - Content Type: application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml
part-relationships: 3 relationship(s) = [/xl/worksheets/_rels/sheet10.xml.rels,/xl/worksheets/sheet10.xml,/xl/worksheets/_rels/sheet10.xml.rels]
Значения отладки для xmlOptions
:
SAVE_USE_DEFAULT_NAMESPACE=null
CHARACTER_ENCODING=UTF-8
SAVE_OUTER=null
SAVE_SUGGESTED_PREFIXES={http://schemas.openxmlformats.org/drawingml/2006/chart=c, http://schemas.openxmlformats.org/wordprocessingml/2006/main=w, http://schemas.microsoft.com/office/word/2006/wordml=wne, http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes=vt, http://schemas.openxmlformats.org/presentationml/2006/main=p, urn:schemas-microsoft-com:office:word=w10, urn:schemas-microsoft-com:vml=v, http://schemas.openxmlformats.org/drawingml/2006/main=a, http://schemas.openxmlformats.org/officeDocument/2006/math=m, http://schemas.openxmlformats.org/officeDocument/2006/relationships=r, urn:schemas-microsoft-com:office:excel=x, urn:schemas-microsoft-com:office:office=o, http://schemas.openxmlformats.org/markup-compatibility/2006=ve, http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing=wp}
ENTITY_EXPANSION_LIMIT=1
SAVE_AGGRESSIVE_NAMESPACES=null
SAVE_SYNTHETIC_DOCUMENT_ELEMENT={http://schemas.openxmlformats.org/spreadsheetml/2006/main}worksheet
Еще глубже становится ясно, что при этом происходит сбойМетод:
public void save(OutputStream os, XmlOptions options) throws IOException
{ XmlCursor cur = newCursorForce(); try { cur.save(os, makeInnerOptions(options)); } finally { cur.dispose(); } }
в XmlObjectBase
, в частности на newCursorForce()
.
В чем может быть причина того, что этот метод дает сбой на любом другом компьютере, а также на моем компьютере в режиме отладки?При нормальном выполнении все приложение работает гладко.
РЕДАКТИРОВАТЬ:
Я попытался копать глубже, и теперь я нахожусь на org.apache.xmlbeans.impl.store.Saver
, где оно может потерпеть неудачу на createSaveCur ( Cur c, XmlOptions options )
, но не совсем уверен.
РЕДАКТИРОВАТЬ 2:
До сих пор мне казалось, что моему приложению требовалось слишком много памяти для продолжения, и поэтому он просто остановился на этом этапе без выброса OutOfMemoryException
.Теперь я увеличил объем доступной памяти и мне нужно еще немного проверить, если это истинная причина
Если вам нужна дополнительная информация, не стесняйтесь спрашивать.