[
https://issues.apache.org/jira/browse/ODFTOOLKIT-396?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Uwe Ryssel updated ODFTOOLKIT-396:
----------------------------------
Description:
We use the method SpreadsheetDocument.appendSheet(Table refTable, String name)
to copy/clone sheets of existing ODF files. For a specific file, we get a
NullPointer exception during this call. One of my students has posted this
issue in the incubator-odf-users mailing list yet (see topic "Working with
spreadsheet templates in odftoolkit 0.6.1" in November 2014).
I have investigated this issue a bit further and found following issue:
When using appendSheet with a given Table object, the containing
TableTableElement is cloned. But if this element contains an OdfAlienElement,
this cloning will fail.
When an OdfElement is cloned, the method OdfFileDom.newOdfElement() is called
with the corresponding class object (OdfAlienElement.class in this case).
OdfFileDom.newOdfElement() gets the value of the field ELEMENT_NAME by calling
clazz.getField("ELEMENT_NAME").get(null), which is only valid for static
fields. But OdfAlienElement's ELEMENT_NAME is not static (in opposite to the
other OdfElements), which creates the mentioned NullPointer exception. I
understand that ELEMENT_NAME cannot be static, because there is no common name
for all OdfAlienElements.
To fix the bug, I think, the OdfElement.cloneNode() has to be overwritten for
OdfAlienElement to prevent the calling of OdfFileDom.newOdfElement().
In the example file the OdfAlienElement contains the XML element
<table:table-protection
table:select-unprotected-cells="true"></table:table-protection>. The ODF file
is created originally from an Excel file.
was:
We use the method SpreadsheetDocument.appendSheet(Table refTable, String name)
to copy/clone sheets of existing ODF files. For a specific file, we get a
NullPointer exception during this call. One of my students has posted this
issue in the incubator-odf-users mailing list yet (see topic "Working with
spreadsheet templates in odftoolkit 0.6.1" in November 2014).
I have investigated this issue a bit further and found following issue:
When using appendSheet with a given Table object, the containing
TableTableElement is cloned. But if this element contains an OdfAlienElement,
this cloning will fail.
When an OdfElement is cloned, the method OdfFileDom.newOdfElement() is called
with the corresponding class object (OdfAlienElement.class in this case).
OdfFileDom.newOdfElement() gets the value of the field ELEMENT_NAME by calling
clazz.getField("ELEMENT_NAME").get(null), which is only valid for static
fields. But OdfAlienElement's ELEMENT_NAME is not static (in opposite to the
other OdfElements), which creates the mentioned NullPointer exception. I
understand that ELEMENT_NAME cannot be static, because there is no common name
for all OdfAlienElements.
To fix the bug, I think, the OdfElement.cloneNode() have to be overwritten for
OdfAlienElement to prevent the calling of OdfFileDom.newOdfElement().
In the example file the OdfAlienElement contains the XML element
<table:table-protection
table:select-unprotected-cells="true"></table:table-protection>. The ODF file
is created originally from an Excel file.
> SpreadsheetDocument.appendSheet fails because of buggy alien element cloning
> ----------------------------------------------------------------------------
>
> Key: ODFTOOLKIT-396
> URL: https://issues.apache.org/jira/browse/ODFTOOLKIT-396
> Project: ODF Toolkit
> Issue Type: Bug
> Components: odfdom
> Affects Versions: 0.6.1-incubating
> Environment: Windows
> Reporter: Uwe Ryssel
>
> We use the method SpreadsheetDocument.appendSheet(Table refTable, String
> name) to copy/clone sheets of existing ODF files. For a specific file, we get
> a NullPointer exception during this call. One of my students has posted this
> issue in the incubator-odf-users mailing list yet (see topic "Working with
> spreadsheet templates in odftoolkit 0.6.1" in November 2014).
> I have investigated this issue a bit further and found following issue:
> When using appendSheet with a given Table object, the containing
> TableTableElement is cloned. But if this element contains an OdfAlienElement,
> this cloning will fail.
> When an OdfElement is cloned, the method OdfFileDom.newOdfElement() is called
> with the corresponding class object (OdfAlienElement.class in this case).
> OdfFileDom.newOdfElement() gets the value of the field ELEMENT_NAME by
> calling clazz.getField("ELEMENT_NAME").get(null), which is only valid for
> static fields. But OdfAlienElement's ELEMENT_NAME is not static (in opposite
> to the other OdfElements), which creates the mentioned NullPointer exception.
> I understand that ELEMENT_NAME cannot be static, because there is no common
> name for all OdfAlienElements.
> To fix the bug, I think, the OdfElement.cloneNode() has to be overwritten for
> OdfAlienElement to prevent the calling of OdfFileDom.newOdfElement().
> In the example file the OdfAlienElement contains the XML element
> <table:table-protection
> table:select-unprotected-cells="true"></table:table-protection>. The ODF file
> is created originally from an Excel file.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)