ODFDOM 0.7.0 JVM Dump

  • From: <lists@datanucleus.org>
  • To: issues@odftoolkit.odftoolkit.org
  • Subject: ODFDOM 0.7.0 JVM Dump
  • Date: Wed, 30 Sep 2009 08:13:19 +0000 (GMT)

In migrating the DataNucleus JDO/JPA wrapper to ODF from 0.6.16 to
0.7.0 I find the following case results in a JVM dump. Try running the
following Main

package org.datanucleus.test;

import java.io.File;
import java.io.FileOutputStream;

import org.odftoolkit.odfdom.OdfFileDom;
import org.odftoolkit.odfdom.doc.OdfDocument;
import org.odftoolkit.odfdom.doc.OdfSpreadsheetDocument;
import org.odftoolkit.odfdom.doc.office.OdfOfficeAutomaticStyles;
import org.odftoolkit.odfdom.doc.style.OdfStyle;
import org.odftoolkit.odfdom.doc.table.OdfTable;
import org.odftoolkit.odfdom.doc.table.OdfTableRow;
import org.odftoolkit.odfdom.dom.OdfNamespaceNames;
import org.odftoolkit.odfdom.dom.style.OdfStyleFamily;
import org.odftoolkit.odfdom.dom.style.props.OdfTableCellProperties;
import org.odftoolkit.odfdom.dom.style.props.OdfTableRowProperties;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class Main
{
    static public void main(final String[] args)
    {
        try
        {
            String filename = "test.ods";
            File file = new File(filename);
            if (!file.exists())
            {
                System.out.println(">> Creating new spreadsheet");
                // ODF spreadsheet doesn't exist, so create
                OdfDocument doc =
OdfSpreadsheetDocument.newSpreadsheetDocument();

                // Remove the default table added in construction
                OdfFileDom contentDoc = doc.getContentDom();
                Element spreadsheetElement =
(Element)contentDoc.getElementsByTagNameNS(
                    OdfNamespaceNames.OFFICE.getNamespaceUri(),
"spreadsheet").item(0);
                OdfTable table = (OdfTable)
(spreadsheetElement.getElementsByTagNameNS(
                    OdfNamespaceNames.TABLE.getNamespaceUri(),
"table").item(0));
                table.getParentNode().removeChild(table);

                System.out.println(">> Saving new spreadsheet");
                doc.save(file);
            }

            System.out.println(">> Loading spreadsheet");
            OdfDocument conn = OdfDocument.loadDocument(file);

            OdfFileDom contentDoc =
((OdfDocument)conn).getContentDom();
            OdfOfficeAutomaticStyles styles =
contentDoc.getOrCreateAutomaticStyles();

            OdfStyle style = styles.getStyle("DN_Headers",
OdfStyleFamily.TableRow);
            if (style == null)
            {
                System.out.println(">> Adding DN_Headers style");
                style = new OdfStyle(contentDoc);
                style.setStyleNameAttribute("DN_Headers");
               
style.setStyleFamilyAttribute(OdfStyleFamily.TableRow.getName());
               
style.setProperty(OdfTableRowProperties.BackgroundColor, "#74a3db");
                styles.appendChild(style);
            }

            style = styles.getStyle("DN_PK", OdfStyleFamily.TableCell);
            if (style == null)
            {
                System.out.println(">> Adding DN_PK style");
                style = new OdfStyle(contentDoc);
                style.setStyleNameAttribute("DN_PK");
               
style.setStyleFamilyAttribute(OdfStyleFamily.TableCell.getName());
               
style.setProperty(OdfTableCellProperties.BackgroundColor, "#c2d9e0");
                styles.appendChild(style);
            }

            style = styles.getStyle("DN_Relation",
OdfStyleFamily.TableCell);
            if (style == null)
            {
                System.out.println(">> Adding DN_Relation style");
                style = new OdfStyle(contentDoc);
                style.setStyleNameAttribute("DN_Relation");
               
style.setStyleFamilyAttribute(OdfStyleFamily.TableCell.getName());
               
style.setProperty(OdfTableCellProperties.BackgroundColor, "#DDDDDD");
                styles.appendChild(style);
            }

            String sheetName = "First";
            OdfTable table = getODFTableForClass(sheetName,
contentDoc);
            if (table == null)
            {
                System.out.println(">> Adding OdfTable with name " +
sheetName);
                // Table doesn't exist yet so create and add to
spreadsheet
                table = new OdfTable(contentDoc);
                table.setTableNameAttribute(sheetName);
                Element officeSpreadsheet =
(Element)contentDoc.getElementsByTagNameNS(
                    OdfNamespaceNames.OFFICE.getNamespaceUri(),
"spreadsheet").item(0);
                officeSpreadsheet.appendChild(table);
            }
            System.out.println(">> Adding OdfTableRow");
            OdfTableRow row = new OdfTableRow(contentDoc);
            table.appendChild(row);


            // Close the document
            System.out.println(">> Saving document to " + file);
            FileOutputStream os = new FileOutputStream(file);
            conn.save(os);
            System.out.println(">> Closing OutputStream for " + file);
            os.close();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

    public static OdfTable getODFTableForClass(String sheetName,
OdfFileDom contentDoc)
    {
        OdfTable table = null;
        Element spreadsheetElement =
(Element)contentDoc.getElementsByTagNameNS(
            OdfNamespaceNames.OFFICE.getNamespaceUri(),
"spreadsheet").item(0);
        NodeList tables =
spreadsheetElement.getElementsByTagNameNS(OdfNamespaceNames.TABLE.getNa
mespaceUri(), "table");
        for (int i=0;i<tables.getLength();i++)
        {
            Node tableNode = tables.item(i);
            NamedNodeMap attrMap = tableNode.getAttributes();
            for (int j=0;j<attrMap.getLength();j++)
            {
                Node attr = attrMap.item(j);
                if (attr.getNodeName().equals("table:name") &&
attr.getNodeValue().equals(sheetName))
                {
                    return (OdfTable)tableNode;
                }
            }
        }
        return table;
    }
}

and I get a JVM dump from the OdfDocument.save()

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGBUS (0x7) at pc=0xb7433c53, pid=13476, tid=3032931216
#
# JRE version: 6.0_14-b08
# Java VM: Java HotSpot(TM) Client VM (14.0-b16 mixed mode, sharing
linux-x86 )
# Problematic frame:
# C  [libzip.so+0xbc53]
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#

---------------  T H R E A D  ---------------

Current thread (0xb4972800):  JavaThread
"org.datanucleus.test.Main.main()" [_thread_in_native, id=13501,
stack(0xb4c1d000,0xb4c6e000)]

siginfo:si_signo=SIGBUS: si_errno=0, si_code=2 (BUS_ADRERR),
si_addr=0xb4ad826e

Registers:
EAX=0x084ba7c0, EBX=0xb74387bc, ECX=0xb4ad8000, EDX=0x00001000
ESP=0xb4c6c098, EBP=0xb4c6c0c0, ESI=0xb4ad8251, EDI=0x0847b628
EIP=0xb7433c53, CR2=0xb4ad826e, EFLAGS=0x00210282

Top of Stack: (sp=0xb4c6c098)
0xb4c6c098:   00000030 b4b1f0a8 b4b1f0b0 b4b1f49c
0xb4c6c0a8:   081ef608 b74387bc b7433c0b b74387bc
0xb4c6c0b8:   084ba5d4 00000000 b4c6c0f0 b743400b
0xb4c6c0c8:   084ba7c0 084ba5d4 00000000 b7821fea
0xb4c6c0d8:   081ef608 00000000 91c4522e b74387bc
0xb4c6c0e8:   b4c6c138 b4972910 b4c6c560 b742b1f9
0xb4c6c0f8:   084ba7c0 b4c6c138 00000000 00000015
0xb4c6c108:   b4c6c138 b74387bc b4c6c120 b7434132

Instructions: (pc=0xb7433c53)
0xb7433c43:   8b 70 04 8b 45 08 8b 48 10 8b 50 1c 01 ce 29 d6
0xb7433c53:   0f b6 46 1d 0f b6 56 1c c1 e0 08 09 c2 89 55 f0

Stack: [0xb4c1d000,0xb4c6e000],  sp=0xb4c6c098,  free space=316k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code,
C=native code)
C  [libzip.so+0xbc53]
C  [libzip.so+0xc00b]  ZIP_GetEntry+0x10b
C  [libzip.so+0x31f9]  Java_java_util_zip_ZipFile_getEntry+0xc9
J  java.util.zip.ZipFile.getEntry(JLjava/lang/String;Z)J

java.util.zip.ZipFile.getInputStream(Ljava/lang/String;)Ljava/io/InputS
tream;

java.util.zip.ZipFile.getInputStream(Ljava/util/zip/ZipEntry;)Ljava/io/
InputStream;

org.odftoolkit.odfdom.pkg.OdfPackage.getInputStream(Ljava/lang/String;)
Ljava/io/InputStream;+29
j  org.odftoolkit.odfdom.pkg.OdfPackage.parseManifest()V+7

org.odftoolkit.odfdom.pkg.OdfPackage.insert(Lorg/w3c/dom/Document;Ljava
/lang/String;Ljava/lang/String;)V+14
j  org.odftoolkit.odfdom.doc.OdfDocument.insertDOMsToPkg()V+23

org.odftoolkit.odfdom.doc.OdfDocument.save(Ljava/io/OutputStream;)V+95
j  org.datanucleus.test.Main.main([Ljava/lang/String;)V+519
v  ~StubRoutines::call_stub
V  [libjvm.so+0x213560]
V  [libjvm.so+0x326f58]
V  [libjvm.so+0x2133bf]
V  [libjvm.so+0x35433b]
V  [libjvm.so+0x3572a1]
V  [libjvm.so+0x28c5cf]
C  [libjava.so+0x152d4] 
Java_sun_reflect_NativeMethodAccessorImpl_invoke0+0x34

sun.reflect.NativeMethodAccessorImpl.invoke0(Ljava/lang/reflect/Method;
Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+0

sun.reflect.NativeMethodAccessorImpl.invoke(Ljava/lang/Object;[Ljava/la
ng/Object;)Ljava/lang/Object;+87

sun.reflect.DelegatingMethodAccessorImpl.invoke(Ljava/lang/Object;[Ljav
a/lang/Object;)Ljava/lang/Object;+6

java.lang.reflect.Method.invoke(Ljava/lang/Object;[Ljava/lang/Object;)L
java/lang/Object;+161
j  org.codehaus.mojo.exec.ExecJavaMojo$1.run()V+92
j  java.lang.Thread.run()V+11
v  ~StubRoutines::call_stub
V  [libjvm.so+0x213560]
V  [libjvm.so+0x326f58]
V  [libjvm.so+0x212d67]
V  [libjvm.so+0x212e1a]
V  [libjvm.so+0x290135]
V  [libjvm.so+0x3ca43e]
V  [libjvm.so+0x3283fe]
C  [libpthread.so.0+0x54e2]

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
J  java.util.zip.ZipFile.getEntry(JLjava/lang/String;Z)J

java.util.zip.ZipFile.getInputStream(Ljava/lang/String;)Ljava/io/InputS
tream;

java.util.zip.ZipFile.getInputStream(Ljava/util/zip/ZipEntry;)Ljava/io/
InputStream;

org.odftoolkit.odfdom.pkg.OdfPackage.getInputStream(Ljava/lang/String;)
Ljava/io/InputStream;+29
j  org.odftoolkit.odfdom.pkg.OdfPackage.parseManifest()V+7

org.odftoolkit.odfdom.pkg.OdfPackage.insert(Lorg/w3c/dom/Document;Ljava
/lang/String;Ljava/lang/String;)V+14
j  org.odftoolkit.odfdom.doc.OdfDocument.insertDOMsToPkg()V+23

org.odftoolkit.odfdom.doc.OdfDocument.save(Ljava/io/OutputStream;)V+95
j  org.datanucleus.test.Main.main([Ljava/lang/String;)V+519
v  ~StubRoutines::call_stub

sun.reflect.NativeMethodAccessorImpl.invoke0(Ljava/lang/reflect/Method;
Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+0

sun.reflect.NativeMethodAccessorImpl.invoke(Ljava/lang/Object;[Ljava/la
ng/Object;)Ljava/lang/Object;+87

sun.reflect.DelegatingMethodAccessorImpl.invoke(Ljava/lang/Object;[Ljav
a/lang/Object;)Ljava/lang/Object;+6

java.lang.reflect.Method.invoke(Ljava/lang/Object;[Ljava/lang/Object;)L
java/lang/Object;+161
j  org.codehaus.mojo.exec.ExecJavaMojo$1.run()V+92
j  java.lang.Thread.run()V+11
v  ~StubRoutines::call_stub

---------------  P R O C E S S  ---------------

Java Threads: ( => current thread )
=>0xb4972800 JavaThread "org.datanucleus.test.Main.main()"
[_thread_in_native, id=13501, stack(0xb4c1d000,0xb4c6e000)]
  0x08096000 JavaThread "Low Memory Detector" daemon [_thread_blocked,
id=13484, stack(0xb4d1a000,0xb4d6b000)]
  0x08092c00 JavaThread "CompilerThread0" daemon [_thread_blocked,
id=13483, stack(0xb4d6b000,0xb4dec000)]
  0x08091400 JavaThread "Signal Dispatcher" daemon [_thread_blocked,
id=13482, stack(0xb4dec000,0xb4e3d000)]
  0x0807fc00 JavaThread "Finalizer" daemon [_thread_blocked, id=13481,
stack(0xb504c000,0xb509d000)]
  0x0807e400 JavaThread "Reference Handler" daemon [_thread_blocked,
id=13480, stack(0xb509d000,0xb50ee000)]
  0x08058800 JavaThread "main" [_thread_blocked, id=13478,
stack(0xb749e000,0xb74ef000)]

Other Threads:
  0x0807c800 VMThread [stack: 0xb50ee000,0xb516f000] [id=13479]
  0x08097c00 WatcherThread [stack: 0xb4c99000,0xb4d1a000] [id=13485]

VM state:not at safepoint (normal execution)

VM Mutex/Monitor currently owned by a thread: None


This is running on Mandriva Linux 2008.1 using JDK 1.6.0_14


ODFDOM 0.7.0 JVM Dump

lists 09/30/2009

Re: ODFDOM 0.7.0 JVM Dump

Svante Schubert 09/30/2009
  • Powered by:
Terms of Use; Privacy Policy; Copyright ©2008-2010 (revision 20100521.d19488a)
 
 
loading
Please Confirm