OK the sender appears to be working now, more or less, but I'm still lacking 
some basics in the xwiki schema. I can't see in the eventlistener tutorial (or 
anywhere else, apologies if it's somewhere I should have seen by now) where I 
should be putting the groovy script that creates and attaches the event 
listener. 

I've tried the two obvious places:
If I put it in the class of the object I want to listen to (i.e. the parent 
'Task' object) it appears to attach to the parent class (i.e. without any of 
it's data attached), and if I put it in the template it doesn't appear to be 
attaching at all. 

Any further advice? or any documentation you could point me towards on this? 





On 12 Jul 2012, at 23:26, Ludovic Dubost wrote:

> 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

_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to