On Fri, Apr 14, 2017 at 12:01 AM, ktc <ktc-w...@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-incorrectly-tp7603477.html > Sent from the XWiki- Dev mailing list archive at Nabble.com. -- Thomas Mortagne