Uploaded image for project: 'XWiki Platform'
  1. XWiki Platform
  2. XWIKI-9718

DocumentUpdatedEvent is fired prior to attachments being saved

    Details

    • Type: Bug
    • Status: Open
    • Priority: Minor
    • Resolution: Unresolved
    • Affects Version/s: 5.2.1
    • Fix Version/s: None
    • Component/s: Storage
    • Labels:
      None
    • Difficulty:
      Unknown
    • Similar issues:

      Description

      to repeat:

      Paste this into a page:

      {{groovy}}
      /* -*- Mode: java; tab-width: 4; indent-tabs-mode: nil; -*- */
      import java.util.List;
      import java.util.ArrayList;
      
      import org.xwiki.observation.ObservationManager;
      import org.xwiki.observation.EventListener;
      import org.xwiki.bridge.event.DocumentUpdatedEvent;
      import org.xwiki.bridge.event.DocumentCreatedEvent;
      import org.xwiki.bridge.event.DocumentDeletedEvent;
      import org.xwiki.observation.event.Event;
      import com.xpn.xwiki.api.XWiki;
      import com.xpn.xwiki.web.Utils;
      import com.xpn.xwiki.XWikiContext;
      import com.xpn.xwiki.doc.XWikiDocument;
      import com.xpn.xwiki.objects.BaseObject;
      
      class TestListener implements EventListener
      {
          public String getName() {
              return "TestListener";
          }
      
          public List<Event> getEvents() {
              return (new ArrayList<Event>() {{
                  add(new DocumentUpdatedEvent());
                  add(new DocumentCreatedEvent());
                  add(new DocumentDeletedEvent());
              }});
          }
      
          public void onEvent(Event event, Object source, Object data) {
              XWikiDocument doc = (XWikiDocument) source;
              if (doc.getAttachmentList().size() > 0) {
                  System.out.println("Received " + event.getClass() + " on " + doc.getFullName() + " which has attachments");
      
                  def xc = (XWikiContext) data;
                  def xwiki = new XWiki(xc.getWiki(), xc);
                  def docB = xwiki.getDocument(name);
                  if (docB.getAttachmentList().size() == 0) {
                      try {
                          throw new Exception();
                      } catch (Exception e) {
                          e.printStackTrace(System.out);
                      }
                  }
              } else {
                  System.out.println("Received " + event.getClass() + " on " + doc.getFullName() + " which has no attachments");
              }
          }
      }
      Utils.getComponent(ObservationManager.class).addListener(new TestListener());
      {{/groovy}}
      

      Then view it.

      Then open a different page which has no attachments.

      Then add an attachment and observe the log.

      expected behaviour: Attachment is available at time of DocumentUpdatedEvent firing
      actual behaviour: getAttachmentList() from a getDocument() of the same document yields nothing even though the document passed with the event contains the attachment.

      Note: Objects other changes to the document have been persisted at this point.

        Attachments

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              calebjamesdelisle CalebJamesDeLisle
            • Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated: