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
[seth.redmond(a)gmail.com], 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)
{
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())
}
// 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 = 'seth.redmond(a)gmail.com'
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);
}
}
// 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}}