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