I found something else that was incorrect, but correcting it didn't
help:
newdoc.getRenderedContent() needs to be
newdoc.getRenderedContent(context)
Dan
I tried changing newdoc.getAttachments() to
newdoc.newDocument(context).getAttachmentList().
I've stripped down the class to remove dependance on getting values
out of the context; i.e I've provided string literals for sender,
cc, etc. I've also changed the rule to DocChangeRule(this), and
removed the test for the change coming from a space's Blog so that
any document save event would trigger email.
Still no joy.
The only clue in the log is when calling the notify method from a
velocity script:
[WARNING] Cannot retrieve method notify from object of class
BlogMailNotificationGroovyClass due to security restrictions.
Dan
Here's the revised class:
/* 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 = DocChangeRule(this);
context.getWiki().getNotificationManager().addGeneralRule(rule);
}
public void notify(XWikiNotificationRule rule, XWikiDocument
newdoc, \
XWikiDocument olddoc, int event, XWikiContext
context)
{
def ms = xwiki.getPlugin("mailsender");
def nb = ms.sendHtmlMessage("XWiki.Admin", \
"dsvoboda(a)structbio.pitt.edu".edu", \
"dsvoboda(a)structbio.pitt.edu".edu", \
"dsvoboda(a)structbio.pitt.edu".edu", \
"subject", \
newdoc.getRenderedContent(), \
newdoc.getContent(), \
newdoc.newDocument(context).getAttachmentList());
}
}
/* *# */
> Ok, I have another idea. Did you try sending the mail without
> attachments ?
>
> This because what you pass the plugin API are XWikiAttachments
>
(
http://maven.xwiki.org/site/xwiki-core-parent/xwiki-core/apidocs/com/xpn/xw…
> ),
> while it expects "com.xpn.xwiki.api.Attachment" (see the plugin API
> here
>
http://code.xwiki.org/xwiki/bin/view/Plugins/MailSenderPlugin).
> If you want to have the proper wrapped attachments to pass the
> plugin,
> you should use "newdoc.newDocument(context).getAttachmentList()"
>
> Hope this helps,
> Jerome.
>
> Daniel Svoboda wrote:
>> Thanks for the replies.
>>
>> I had already found that bug. If I take the conditional completely
>> out
>> of the class, it still doesn't send an email.
>>
>> Dan
>>
>>> It is probably due to the following :
>>>
>>> "if(newdoc.getSpace().substring(lastFour) == "Blog") {"
>>>
>>> in Java, if you have the following :
>>>
>>> String st1 = "Blog";
>>> String st2 = new String("Blog");
>>>
>>> then st1 == st2 will always return false, as the objects are not
>>> the
>>> same. What you want is to compare their values, using
>>> st1.equals(st2),
>>> which will return true.
>>> You can read here to find out more
>>>
http://www.unix.com.ua/orelly/java/langref/ch04_09.htm (especially
>>> this
>>> sentence : "Because the == operator determines if two objects are
>>> the
>>> same object, it is not appropriate for comparisons that need to
>>> determine if two objects have the same contents. For example, if
>>> you
>>> need to know whether two String objects contain the same
>>> sequences of
>>> characters, the == operator is inappropriate. You should use the
>>> equals() method")
>>>
>>> Anyway, their is even simpler for you. What you want to do is
>>> check if
>>> the space name finishes by "Blog". For this the appropriate
>>> method is
>>> String#endsWith
>>>
(
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#endsWith(java…
>>> )
>>> )
>>> As in :
>>>
>>> "if(newdoc.getSpace().endsWith("Blog")) {"
>>>
>>> Hope this helps and fixes your issue,
>>>
>>> Regards,
>>> Jerome
>>>
>>> Daniel Svoboda wrote:
>>>> 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