Yes. The problem is that no mail gets sent, which is the purpose of
the notification. I reread my initial post, and now I understand your
confusion. I didn't explicitly state that the class wasn't working.
I'm using XWiki Enterprise manager 1.3 with platform version 1.5.2.
Dan
Do you actually encounter a problem, besides the error
in the logs ?
I believe those logs are generated when you call getRenderedContent on
your blog article, so I maintain they have nothing to do with your
notification class.
Which version of XWiki Enterprise are you using ?
Jerome.
Dan Svoboda wrote:
> Hi,
>
> See below
>
> Dan Svoboda wrote:
>>> Hi,
>>>
>>> I'm trying to use the notification system to trigger the sending of
>>> email whenever a comment is added to a blog article. I'm
>>> patterning my
>>> groovy class after the pircbot example on the xwiki snippets site.
>>>
>>> My system is xwiki workspaces as a virtual xwiki under xem. The
>>> platform version is 1.5.2.
>>>
>>> Here's my groovy class (XWSNotify.BlogMailNotificationGroovyClass):
>>>
>>> /* Groovy Class #* */
>>>
>>> import com.xpn.xwiki.api.XWiki;
>>> import com.xpn.xwiki.XWikiContext;
>>> import com.xpn.xwiki.notify.XWikiDocChangeNotificationInterface;
>>> import com.xpn.xwiki.notify.DocObjectChangedRule;
>>> import com.xpn.xwiki.notify.XWikiNotificationRule;
>>> import com.xpn.xwiki.doc.XWikiDocument;
>>>
>>> public class BlogMailNotificationGroovyClass implements \
>>>
>>> XWikiDocChangeNotificationInterface
>>>
>>> {
>>> def xwiki;
>>> def rule;
>>> def name;
>>>
>>> public void initClasses(XWikiContext context)
>>> {
>>> this.xwiki = context.getWiki();
>>> // listen to notifications
>>> this.rule = DocObjectChangedRule(this);
>>>
>>> context.getWiki().getNotificationManager().addGeneralRule(rule);
>>> }
>>>
>>> public void notify(XWikiNotificationRule rule, XWikiDocument
>>> newdoc, \
>>> XWikiDocument olddoc, int event, XWikiContext
>>> context)
>>> {
>>> def length = newdoc.getSpace().length();
>>> def lastFour = length - 4;
>>> if(newdoc.getSpace().substring(lastFour) == "Blog") {
>>>
>>> def ms = xwiki.getPlugin("mailsender");
>>> def nb = ms.sendHtmlMessage(context.getUser(),
>>> "myAddress(a)myHost.org <mailto:myAddress@myHost.org>
>>> ", \
>>> context.get("ccrecipients"),
>>> context.get("bccrecipients"), \
>>> context.get("subject"),
>>> newdoc.getRenderedContent(), \
>>> newdoc.getContent(),
>>> newdoc.getAttachments());
>>> }
>>> }
>>> }
>>>
>>> /* *# */
>>>
>>> Here's a velocity script I'm using to initialize/test:
>>>
>>> #set($sc =
>>> $context.getContext().getEngineContext().getServletContext())
>>> $sc.getAttribute("blgmailnotif")<br/>
>>> #set($blgmlnotif =
>>> $
>>> xwiki
>>> .parseGroovyFromPage("XWSNotify.BlogMailNotificationGroovyClass"))
>>> #set($ok = $sc.setAttribute("blgmailnotif", $blgmlnotif))
>>> #set($blgmailnotif = $sc.getAttribute("blgmailnotif"))
>>> $sc.getAttribute("blgmailnotif")<br/>
>>> #set($ok = $blgmlnotif.initClasses($context))
>>> #set($ok = $blgmlnotif.notify($blgmlnotif.rule,$newdoc,$newdoc,
>>> 3,$context))
>>>
>>> Here's the output from the velocity script:
>>>
>>> BlogMailNotificationGroovyClass@68e4a47
>>> BlogMailNotificationGroovyClass@3c401d45
>>>
>>> So, the groovy class gets initialized to a new reference
>>> successfully
>>> each time parseGroovyFromPage is called.
>>>
>>> Here's what appears in the log after running the velocity script:
>>>
>>> [ERROR] Left side ($request.title) of '!=' operation has null
>>> value.
>>> Operation not possible. [line 53, column 43]
>>> [WARNING] Cannot retrieve method notify from object of class
>>> BlogMailNotificationGroovyClass due to security restrictions.
>>>
>>> If I alter the velocity script to:
>>>
>>> #set($sc =
>>> $context.getContext().getEngineContext().getServletContext())
>>> $sc.getAttribute("blgmailnotif")<br/>
>>>
>>> Here's what appears in the log:
>>>
>>> [ERROR] Left side ($request.title) of '!=' operation has null
>>> value.
>>> Operation not possible. [line 53, column 43]
>>>
>>> So, the [WARNING] is the only log entry pertaining to the groovy
>>> class.
>>>
>>> If I add a comment to a Blog article (with or without the
>>> BlogMailNotificationGroovyClass initialized), the following
>>> appears in
>>> the log:
>>>
>>> [ERROR] Left side ($index) of addition operation has null value.
>>> Operation not possible. [line 20, column 25]
>>> [ERROR] Left side ($index) of addition operation has null value.
>>> Operation not possible. [line 20, column 25]
>>> [ERROR] Left side ($index) of addition operation has null value.
>>> Operation not possible. [line 20, column 25]
>>> [ERROR] Left side ($index) of addition operation has null value.
>>> Operation not possible. [line 20, column 25]
>>> [ERROR] Left side ($index) of addition operation has null value.
>>> Operation not possible. [line 20, column 25]
>>> [ERROR] Left side ($index) of addition operation has null value.
>>> Operation not possible. [line 20, column 25]
>>> [ERROR] Left side ($index) of addition operation has null value.
>>> Operation not possible. [line 20, column 25]
>>> [ERROR] Left side ($index) of addition operation has null value.
>>> Operation not possible. [line 20, column 25]
>>> [ERROR] Left side ($index) of addition operation has null value.
>>> Operation not possible. [line 20, column 25]
>>>
>>> The number of lines corresponds to the number of comments present
>>> in
>>> the Blog article. There's nothing in the log pertaining to the
>>> groovy
>>> class.
>
>> Indeed, this has nothing to do with your groovy notification. This
>> is
>> generated by the velocity engine.
>> Is your skin customized ? Is the blog application modified ? (The
>> log
>> says that somewhere a variable $index is trying to add something to
>> "null". Might be the pagination of blog articles ?)
>>
>> Jerome.
>
> I can't find a variable $index in any arithmetical expression in any
> velocity script anywhere on the site.
>
> The skin is customized only to the extent of some inconsequential
> tweaks. Same with blog app.
>
> There's no pagination of blog articles.
>
> Would someone please review the basic mechanics of how groovy classes
> work, particularly as it pertains to my notification class?
>
> Also, I see by reading source that there's a newer way of monitoring
> events through the "observation manager". Would someone please review
> how to use this system?
>
> Thanks,
>
> Dan