On Fri, Apr 14, 2017 at 12:01 AM, ktc <ktc-wiki(a)amazon.com> wrote:
I'm running into what appears to be a bug in how
XObjects are removed and
added, and wanted to ask if I am perhaps using them incorrectly.
Basically I am performing the following sequence of steps:
1. Insert some XObjects to an XWikiDocument using document.newXObject().
Save the document and reload.
2. Delete one of the XObjects in the middle of the list of XObjects, using
document.removeXObject(). Save the document and reload.
3. Add another XObject using document.newXObject(). Save.
Here is that the document's xObjects data looks like after each step
(simplified for demonstration purposes):
AFTER STEP 1:
index=0
object="<?xml...>...<number>0</number>...</xml>"
index=1
object="<?xml...>...<number>1</number>...</xml>"
index=2
object="<?xml...>...<number>2</number>...</xml>"
AFTER STEP 2 (assume I delete the xObject with index=1):
index=0
object="<?xml...>...<number>0</number>...</xml>"
index=1 object=null
index=2
object="<?xml...>...<number>2</number>...</xml>"
AFTER STEP 3:
index=0
object="<?xml...>...<number>0</number>...</xml>"
index=1 object=null
index=2
object="<?xml...>...<number>2</number>...</xml>"
index=3
object="<?xml...>...<number>2</number>...</xml>"
As you can see there are two related problems here:
1. A null object is being preserved in the list of XObjects, even after
being rehydrated from Hibernate following a server restart.
This is done on purpose so that xobjects keep the same index in the list.
2. The index=3 object has been given a
'number' of '2' -- but that number is
already in use by index=2 object.
This is not expected. Since as you said the assigned number is based
on list size - 1 it should be 3.
Would be great if you could create an issue on
http://jira.xwiki.org
for it with the steps to reproduce it.
Because of this, saving the document actually fails: I am receiving a
NonUniqueObjectException as follows:
org.hibernate.NonUniqueObjectException: a different object with the same
identifier value was already associated with the session:
[com.xpn.xwiki.objects.BaseObject#-1957000305211198111]
Looking in the XWiki code it looks like this is essentially happening
because the value of 'number' is computed as 'list size - 1'. So that
'null'
that gets preserved in the list seems to be throwing off the logic.
Am I using newXObject()/removeXObject() improperly?
Please advise.
Thanks!
--
View this message in context:
http://xwiki.475771.n2.nabble.com/Bug-in-XObjects-or-am-I-using-them-incorr…
Sent from the XWiki- Dev mailing list archive at
Nabble.com.
--
Thomas Mortagne