Dan Svoboda wrote:
> 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.
This looks to me very likely to be linked with the security
configuration of the servlet container.
In which environment does your wiki run in ?
Jerome
>
> 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", \
> "[EMAIL PROTECTED]", \
> "[EMAIL PROTECTED]", \
> "[EMAIL PROTECTED]", \
> "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/xwiki/doc/XWikiAttachment.html
>>
>> ),
>> 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.lang.String
>>>>
>>>> )
>>>> )
>>>> 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(),
>>>>>>>>> "[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>
>>>>>>>>> ", \
>>>>>>>>> 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:
>>>>>>>>>
>>>>>>>>> [EMAIL PROTECTED]
>>>>>>>>> [EMAIL PROTECTED]
>>>>>>>>>
>>>>>>>>> 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
> _______________________________________________
> users mailing list
> [email protected]
> http://lists.xwiki.org/mailman/listinfo/users
_______________________________________________
users mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/users