Hi Iurii,
I have created this issue:
https://issues.apache.org/jira/browse/SYNCOPE-974
and I am also about to commit a fix.
FYI, the actual problem here is the misleading error message; your
notification object is anyway invalid because you have posted no events
for it (as the error message will correctly report after my fix).
Regards.
On 25/11/2016 13:32, Iurii Smyrnov wrote:
Hi Francesco,
Could you please take a look at the logs snippets (/*core-rest.log,
*//*core-persistence.log*/) I've attached (I've set logging level to
DEBUG and sent create notification request):
_Request_:
{
"recipientAttrName":"emails",
"selfAsRecipient":false,
"sender":"[email protected]",
"subject":"subject 21",
"template":"requestPasswordReset",
"traceLevel":"ALL",
"active":true
}
_Response_:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<syncope2:error xmlns:syncope2="http://syncope.apache.org/2.0">
<elements>
<element>InvalidStateException: The field "template" of
instance "JPANotification[a96fff27-1b5d-4167-afff-271b5db1674f]"
contained a null value; the metadata for this field specifies that
nulls are illegal.</element>
</elements>
<status>500</status>
<type>Unknown</type>
</syncope2:error>
Some thing wrong here:
at
org.apache.syncope.core.persistence.jpa.dao.JPANotificationDAO.findAll(JPANotificationDAO.java:65)
~[syncope-core-persistence-jpa-2.0.1.jar:2.0.1]
Thanks,
Iurii Smyrnov
------------------------------------------------------------------------
*From:* Francesco Chicchiriccò <[email protected]>
*Sent:* Thursday, November 24, 2016 3:58:34 PM
*To:* [email protected]
*Subject:* Re: Syncope notifications
Hi,
you need to take a look at server logs to see what is actually
happening: the Java statements below look generally fine, besides
notificationTO.setKey("111");
which is ignored, as keys are autogenerated.
I also suggest to use the admin console: first set the CXF logs at
DEBUG or TRACE level, then create a notification and see what messages
are exchanged.
HTH
Regards.
On 24/11/2016 14:46, Iurii Smyrnov wrote:
Hi Francesco,
Thanks for help, and yes we want to have REST endpoint - I've
tried the NotificationService to create notification, but got strange
error (see the log below), and before notification creation I've
called 'read' method of the MailTemplateService and successfully got
template entity with key = "requestPasswordReset" and set this key to
the notification creation request (NotificationTO) (see code snippet
below). Could you please take a look at it, is it a syncope bug :
33971 [qtp1620216417-18] INFO o.a.c.i.LoggingOutInterceptor -
Outbound Message
---------------------------
ID: 2
Address: http://192.168.99.100:9080/syncope/rest/notifications
Http-Method: POST
Content-Type: application/json
Headers: {Content-Type=[application/json], Accept=[application/json],
Authorization=[Basic YWRtaW46cGFzc3dvcmQ=]}
Payload:
{"key":"111","abouts":{},"recipientsFIQL":null,"recipientAttrName":"emails","selfAsRecipient":false,"recipientsProviderClassName":null,"sender":"[email protected]","subject":"subject
1","template":"requestPasswordReset","traceLevel":"ALL","active":true,"events":[],"staticRecipients":[]}
--------------------------------------
34017 [qtp1620216417-18] INFO o.a.c.i.LoggingInInterceptor - Inbound
Message
----------------------------
ID: 2
Response-Code: 500
Encoding: UTF-8
Content-Type: application/json;charset=UTF-8
Headers: {connection=[close],
content-type=[application/json;charset=UTF-8], Date=[Thu, 24 Nov 2016
13:25:21 GMT], Server=[Apache-Coyote/1.1],
transfer-encoding=[chunked],
X-Application-Error-Info=[Unknown:InvalidStateException: The field
"template" of instance
"JPANotification[5b5da1d2-bbf5-49f7-9da1-d2bbf519f746]" contained a
null value; the metadata for this field specifies that nulls are
illegal.], X-Syncope-Domain=[Master]}
Payload:
{"status":500,"type":"Unknown","elements":["InvalidStateException:
The field \"template\" of instance
\"JPANotification[5b5da1d2-bbf5-49f7-9da1-d2bbf519f746]\" contained a
null value; the metadata for this field specifies that nulls are
illegal."]}
--------------------------------------
MailTemplateTO mailTemplate =
syncopeClient.getService(MailTemplateService.class).read("requestPasswordReset");
NotificationTO notificationTO = new NotificationTO();
notificationTO.setActive(true);
notificationTO.setKey("111");
notificationTO.setRecipientAttrName("emails");
notificationTO.setSender("[email protected]");
notificationTO.setTemplate(mailTemplate.getKey());
notificationTO.setTraceLevel(TraceLevel.ALL);
notificationTO.setSubject("subject 1");
Response rep =
syncopeClient.getService(NotificationService.class).create(notificationTO);
Thanks,
Iurii Smyrnov
------------------------------------------------------------------------
*From:* Francesco Chicchiriccò <[email protected]>
*Sent:* Wednesday, November 23, 2016 3:08:52 PM
*To:* [email protected]
*Subject:* Re: Syncope notifications
Hi Iurii,
first of all, have you already looked at
https://syncope.apache.org/docs/reference-guide.html#notifications
?
More replies below.
Regards.
On 23/11/2016 12:25, Iurii Smyrnov wrote:
Hi Syncope team,
Could you please help us, we've got few questions to you related
to the Syncope built-in notification functionality:
1. Does Syncope have workflow to request(find) userNames by
user email and send this userNames to his email ?
2. If no, is there a way to create a custom event (i.e.
userName request), to associate it with a Notification (type email)
and to initialize this event from outside of syncope (i.e. via Rest
APIs) ?
I don't think there is something similar; essentially, you'd want to
add a REST endpoint, say
GET /users/[email protected]
which looks for an user with e-mail '[email protected]', gets his
username ('fchicchiricco') and sends an e-mail to [email protected]
with 'fchicchiricco' in the body.
Correct? If so, you'll need to develop an extension for the purpose -
from which you can leverage the existing Notification service.
3. Is there also a way to update syncope mail templates
(requestPasswordReset and confirmPasswordReset) by using some REST
APIs ?
You can update such templates (and create more, actually) via both
Eclipse IDE plugin and admin console: both rely only on REST to
communicate with the core, hence the answer is yes.
Take a look at the embedded Swagger UI (if extension is enabled) or
REST reference available at
http://syncope.apache.org/rest/2.0/index.html
under /mailTemplates
--
Francesco Chicchiriccò
Tirasa - Open Source Excellence
http://www.tirasa.net/
Member at The Apache Software Foundation
Syncope, Cocoon, Olingo, CXF, OpenJPA, PonyMail
http://home.apache.org/~ilgrosso/