You could surround your code in onEvent with a nice try catch and see if it 
changes something

Envoyé de mon iPhone

Le 12 juil. 2012 à 21:49, seth redmond <[email protected]> a écrit :

> still going round in circles on this, I fear… 
> 
> I've switched to documentUpdatedEvent and tried to grab the instance method. 
> The code you wrote in your last email didn't work out of the box - it said 
> the cached 'this.xwiki' object was null, so I changed to trying to get the 
> xwiki object from the context (which should be current when it's requested by 
> the event handler, no?) however the following code works OK when I save it 
> from the object page, but hangs interminably when I the onEvent method is 
> called: 
> 
>    void onEvent(Event event, Object source, Object data)
>    {
>        def mailfrom = '[email protected]'
>        def mailto = xdoc.getStringValue('assignee')
>        def subject = 'xwiki done some stuff, yo'
>        def message = 'document '+xdoc.name+' has been changed'
>        def mailItem = new Mail(mailfrom, mailto, null, null, subject, 
> message, null)
>        def xwcontext = 
> Utils.getComponent(Execution.class).getContext().getProperty('xwikicontext')
> 
>        def myXwiki = xwcontext.getWiki()
>        def sender = myXwiki.getPlugin("mailsender", xwcontext)
> 
>        sender.sendMail(mailItem, xwcontext);
> 
>    }
> 
> It generally needs the xwiki to be killed so I'm not getting any errors I can 
> work with. Seems to be something to do with the plugin request, but I'm 
> damned if I can figure out what. Any sugestions? 
> 
> -s
> 
> 
> 
> On 7 Jul 2012, at 18:48, Sergiu Dumitriu wrote:
> 
>> On 07/07/2012 10:03 AM, seth redmond wrote:
>>> I seem to be running into an error I can't find my way around when passing 
>>> the xwiki context to an eventListener. According to the error message 
>>> itself (below) I appear to be passing the right objects, but I'm still 
>>> getting an exception thrown.
>>> 
>>> I should point out that I'm new to both xwiki and groovy, so I may have 
>>> missed something obvious, is the context not instantiated by the time it's 
>>> been sent  to the event handler? or should I be grabbing it anew?
>>> 
>>> thanks
>>> 
>>> -s
>>> 
>>> 
>>> Error and groovy code below...
>>> 
>>> 2012-07-05 21:19:59,471 
>>> [http://localhost:8080/xwiki/bin/preview/Task/look+into+CMH+%2F+TDT] ERROR 
>>> .o.i.DefaultObservationManager - Failed to send event 
>>> [org.xwiki.observation.event.DocumentUpdateEvent@6b193509] to listener 
>>> [MailingEventListener@171aa1cb]
>>> groovy.lang.MissingMethodException: No signature of method: static 
>>> com.xpn.xwiki.plugin.mailsender.MailSenderPlugin.sendMail() is applicable 
>>> for argument types: (com.xpn.xwiki.plugin.mailsender.Mail, 
>>> com.xpn.xwiki.XWikiContext) values: [From [[email protected]], To [], 
>>> Subject [xwiki done some stuff, yo], Text [document TaskClass has been 
>>> changed], ...]
>>> Possible solutions: sendMail(com.xpn.xwiki.plugin.mailsender.Mail, 
>>> com.xpn.xwiki.XWikiContext), sendMail(com.xpn.xwiki.plugin.mailsender.Mail, 
>>> com.xpn.xwiki.plugin.mailsender.MailConfiguration, 
>>> com.xpn.xwiki.XWikiContext), sendMails(java.util.Collection, 
>>> com.xpn.xwiki.XWikiContext), sendMails(java.util.Collection, 
>>> com.xpn.xwiki.plugin.mailsender.MailConfiguration, 
>>> com.xpn.xwiki.XWikiContext), findAll()
>>> 
>>> 
>>> {{groovy}}
>>> 
>>> import org.xwiki.observation.*
>>> import org.xwiki.observation.event.*
>>> import com.xpn.xwiki.plugin.mailsender.*
>>> import com.xpn.xwiki.web.*
>>> import com.xpn.xwiki.*
>>> 
>>> class MailingEventListener implements EventListener
>>> {
>>>    def xwiki
>>>    def xwcontext
>>>    def context
>>>    def xdoc
>>> 
>>>    MailingEventListener(xwiki, context)
>>>    {
>> 
>> In general you should not cache the xwiki and context objects that you 
>> received here, since they're probably going to be wrong at the time when 
>> events occur. Always get a fresh reference to the context in onEvent, from 
>> the Execution instance. I know that you got this code from the notification 
>> tutorial, but that one is a bit deprecated.
>> 
>>>        this.xwiki = xwiki
>>>        this.context = context
>>>        this.xwcontext = context.getContext()
>>>        this.xdoc = context.doc
>>>    }
>>> 
>>>    String getName()
>>>    {
>>>        // The unique name of this event listener
>>>        return "mailing"
>>>    }
>>> 
>>> 
>>>    List<Event> getEvents()
>>>    {
>>>        // The list of events this listener listens to
>>>        return Arrays.asList(new DocumentUpdateEvent())
>> 
>> This event is deprecated, you should use 
>> org.xwiki.bridge.event.DocumentUpdatedEvent instead
>> 
>>>    }
>>> 
>>>    // Called by the Observation Manager when an event matches the list of 
>>> events returned
>>>    // by getEvents()
>>>    void onEvent(Event event, Object source, Object data)
>>>    {
>>>        def mailfrom = '[email protected]'
>>>        def mailto = xdoc.getStringValue('assignee')
>>>        def subject = 'xwiki done some stuff, yo'
>>>        def message = 'document '+xdoc.name+' has been changed'
>>>        def mailItem = new Mail(mailfrom, mailto, null, null, subject, 
>>> message, null)
>>>        MailSenderPlugin.sendMail(mailItem, xwcontext);
>> 
>> The problem is that you're trying to call a static method, but sendMail is 
>> an instance method. You should get the right instance of the plugin using:
>> this.xwiki.getXWiki().getPlugin("mailsender", xwcontext)
>> 
>>>    }
>>> }
>>> 
>>> // Register against the Observation Manager
>>> def observation = Utils.getComponent(ObservationManager.class)
>>> observation.removeListener("mailing")
>>> def listener = new MailingEventListener(xwiki, xcontext)
>>> observation.addListener(listener)
>>> 
>>> println "{{info}}Listener $listener.name is now registered on 
>>> $listener.events{{/info}}"
>>> println "{{info}}Context = $listener.context{{/info}}"
>>> println "{{info}}$listener.context.doc.name{{/info}}"
>>> 
>>> {{/groovy}}
>> 
>> 
>> -- 
>> Sergiu Dumitriu
>> http://purl.org/net/sergiu/
>> 
>> 
>> _______________________________________________
>> devs mailing list
>> [email protected]
>> http://lists.xwiki.org/mailman/listinfo/devs
> 
> _______________________________________________
> devs mailing list
> [email protected]
> http://lists.xwiki.org/mailman/listinfo/devs
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to