use of org.wso2.carbon.identity.mgt.mail.Notification in project carbon-apimgt by wso2.
the class NotificationExecutor method sendAsyncNotifications.
/**
* Executes the notifer classes in separtate threads.
* @param notificationDTO
* @throws NotificationException
*/
public void sendAsyncNotifications(NotificationDTO notificationDTO) throws NotificationException {
JSONObject notificationConfig;
String notificationType = notificationDTO.getType();
try {
notificationConfig = APIUtil.getTenantConfig(notificationDTO.getTenantDomain());
JSONArray notificationArray = (JSONArray) notificationConfig.get(NotifierConstants.Notifications_KEY);
for (Object notification : notificationArray) {
JSONObject notificationJson = (JSONObject) notification;
String notifierType = (String) notificationJson.get(NotifierConstants.TYPE_KEY);
if (notificationType.equals(notifierType)) {
JSONArray notifierArray = (JSONArray) notificationJson.get("Notifiers");
for (Object notifier : notifierArray) {
JSONObject jsonNotifier = (JSONObject) notifier;
String notifierClass = (String) jsonNotifier.get("Class");
Map map = (Map) jsonNotifier;
Properties prop = notificationDTO.getProperties();
prop.putAll(map);
notificationDTO.setProperties(prop);
// starting Notifier threads
if (notifierClass != null && !notifierClass.isEmpty()) {
Notifier notfier = (Notifier) APIUtil.getClassInstance(notifierClass);
notfier.setNotificationDTO(notificationDTO);
notfier.setTenantDomain(notificationDTO.getTenantDomain());
Thread notificationThread = new Thread(notfier);
notificationThread.start();
}
}
}
}
} catch (IllegalAccessException | InstantiationException | ClassNotFoundException | APIManagementException e) {
throw new NotificationException("Error while Initializing the notifier class", e);
}
}
use of org.wso2.carbon.identity.mgt.mail.Notification in project carbon-apimgt by wso2.
the class NotifyApiServiceImpl method notifyPost.
@Override
public Response notifyPost(String xWSO2KEYManager, String body, MessageContext messageContext) {
try {
NotificationEventService notificationEventService = (NotificationEventService) PrivilegedCarbonContext.getThreadLocalCarbonContext().getOSGiService(NotificationEventService.class, new Hashtable<>());
Map<String, List<String>> requestHeaders = messageContext.getHttpHeaders().getRequestHeaders();
notificationEventService.processEvent(xWSO2KEYManager, body, requestHeaders);
return Response.ok().build();
} catch (APIManagementException e) {
log.error("Error while processing notification", e);
JSONObject responseObj = new JSONObject();
responseObj.put("Message", e.getMessage());
String responseStringObj = String.valueOf(responseObj);
return Response.serverError().entity(responseStringObj).build();
}
}
use of org.wso2.carbon.identity.mgt.mail.Notification in project carbon-business-process by wso2.
the class PeopleActivity method invoke.
public String invoke(ExtensionContext extensionContext) throws FaultException {
BPELMessageContext taskMessageContext = new BPELMessageContext(hiWSDL);
UUID messageID = null;
int tenantId = B4PServiceComponent.getBPELServer().getMultiTenantProcessStore().getTenantId(processId);
String tenantDomain = null;
try {
tenantDomain = B4PContentHolder.getInstance().getRealmService().getTenantManager().getDomain(tenantId);
} catch (UserStoreException e) {
log.error(" Cannot find the tenant domain " + e.toString());
}
if (tenantDomain == null) {
tenantDomain = MultitenantConstants.SUPER_TENANT_DOMAIN_NAME;
}
PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantDomain(tenantDomain);
try {
// Setting the attachment id attachmentIDList
List<Long> attachmentIDList = extractAttachmentIDsToBeSentToHumanTask(extensionContext, taskMessageContext);
taskMessageContext.setOperationName(getOperationName());
SOAPHelper soapHelper = new SOAPHelper(getBinding(), getSoapFactory(), isRPC);
MessageContext messageContext = new MessageContext();
/*
Adding attachment ID list as a method input to createSoapRequest makes no sense.
Have to fix. Here we can't embed attachments in MessageContext, as we have only a
list of attachment ids.
*/
soapHelper.createSoapRequest(messageContext, (Element) extensionContext.readVariable(inputVarName), getOperation(extensionContext), attachmentIDList);
// Coordination Context and skipable attribute is only valid for a Task.
if (InteractionType.TASK.equals(activityType)) {
// Note: If registration service is not enabled, we don't need to send coor-context.
if (CoordinationConfiguration.getInstance().isHumantaskCoordinationEnabled() && CoordinationConfiguration.getInstance().isRegistrationServiceEnabled()) {
messageID = UUID.randomUUID();
soapHelper.addCoordinationContext(messageContext, messageID.toString(), getRegistrationServiceURL());
}
// Adding HumanTask Context overriding attributes.
soapHelper.addOverridingHumanTaskAttributes(messageContext, isSkipable);
}
taskMessageContext.setInMessageContext(messageContext);
taskMessageContext.setPort(getServicePort());
taskMessageContext.setService(getServiceName());
taskMessageContext.setRPCStyleOperation(isRPC);
taskMessageContext.setTwoWay(isTwoWay);
taskMessageContext.setSoapFactoryForCurrentMessageFlow(getSoapFactory());
taskMessageContext.setWsdlBindingForCurrentMessageFlow(getBinding());
taskMessageContext.setUep(getUnifiedEndpoint());
taskMessageContext.setCaller(processId.getLocalPart());
AxisServiceUtils.invokeService(taskMessageContext, getConfigurationContext());
} catch (AxisFault axisFault) {
log.error(axisFault, axisFault);
throw new FaultException(BPEL4PeopleConstants.B4P_FAULT, "Error occurred while invoking service " + serviceName, axisFault);
} catch (B4PCoordinationException coordinationFault) {
throw new FaultException(BPEL4PeopleConstants.B4P_FAULT, "Error occurred while generating Registration Service URL" + serviceName, coordinationFault);
}
if (taskMessageContext.getFaultMessageContext() != null || taskMessageContext.getOutMessageContext().isFault()) {
MessageContext faultContext = taskMessageContext.getFaultMessageContext() != null ? taskMessageContext.getFaultMessageContext() : taskMessageContext.getOutMessageContext();
log.warn("SOAP Fault: " + faultContext.getEnvelope().toString());
throw new FaultException(BPEL4PeopleConstants.B4P_FAULT, faultContext.getEnvelope().toString());
}
String taskID = SOAPHelper.parseResponseFeedback(taskMessageContext.getOutMessageContext().getEnvelope().getBody());
// Ignore Notifications, since we are ignore coordination context for notification.
if (CoordinationConfiguration.getInstance().isHumantaskCoordinationEnabled() && InteractionType.TASK.equals(activityType)) {
Long instanceID = extensionContext.getProcessId();
if (CoordinationConfiguration.getInstance().isRegistrationServiceEnabled()) {
try {
// Already coordinated with Registration service.
updateCoordinationData(messageID.toString(), Long.toString(instanceID), taskID);
} catch (Exception e) {
log.error("Error occurred while updating humantask coordination data.", e);
}
} else {
// Handler URL by manually.
try {
messageID = UUID.randomUUID();
String protocolHandlerURL = generateTaskProtocolHandlerURL(taskMessageContext);
if (log.isDebugEnabled()) {
log.debug("Generated Protocol Handler URL : " + protocolHandlerURL);
}
createCoordinationData(messageID.toString(), protocolHandlerURL, Long.toString(instanceID), taskID);
} catch (Exception e) {
log.error("Error occurred while creating humantask coordination data for coordinated task.", e);
}
}
}
return taskID;
}
use of org.wso2.carbon.identity.mgt.mail.Notification in project carbon-business-process by wso2.
the class NotificationScheduler method publishSMSNotifications.
/**
* Publish SMS notifications by extracting the information from the incoming message rendering tags
* <htd:renderings>
* <htd:rendering type="wso2:email" xmlns:wso2="http://wso2.org/ht/schema/renderings/">
* <wso2:to name="to" type="xsd:string">wso2bpsemail@wso2.com</wso2:to>
* <wso2:subject name="subject" type="xsd:string">email subject to user</wso2:subject>
* <wso2:body name="body" type="xsd:string">Hi email notifications</wso2:body>
* </htd:rendering>
* <htd:rendering type="wso2:sms" xmlns:wso2="http://wso2.org/ht/schema/renderings/">
* <wso2:receiver name="receiver" type="xsd:string">94777459299</wso2:receiver>
* <wso2:body name="body" type="xsd:string">Hi $firstname$</wso2:body>
* </htd:rendering>
* </htd:renderings>
* @param task Task Dao Object for this notification task
* @param taskConfiguration task Configuration for this notification task instance
*/
public void publishSMSNotifications(TaskDAO task, HumanTaskBaseConfiguration taskConfiguration) throws IOException, SAXException, ParserConfigurationException {
String renderingSMS = CommonTaskUtil.getRendering(task, taskConfiguration, new QName(HumanTaskConstants.RENDERING_NAMESPACE, HumanTaskConstants.RENDERING_TYPE_SMS));
if (renderingSMS != null) {
Map<String, String> dynamicPropertiesForSms = new HashMap<String, String>();
Element rootSMS = DOMUtils.stringToDOM(renderingSMS);
if (rootSMS != null) {
String smsReceiver = null;
String smsBody = null;
if (log.isDebugEnabled()) {
log.debug("Parsing SMS notification rendering element 'receiver' for notification id " + task.getId());
}
NodeList smsReceiverList = rootSMS.getElementsByTagNameNS(HumanTaskConstants.RENDERING_NAMESPACE, HumanTaskConstants.SMS_RECEIVER_TAG);
if (smsReceiverList != null && smsReceiverList.getLength() > 0) {
smsReceiver = smsReceiverList.item(0).getTextContent();
} else {
log.warn("SMS notification rendering element 'receiver' not specified for notification with id " + task.getId());
}
NodeList smsBodyList = rootSMS.getElementsByTagNameNS(HumanTaskConstants.RENDERING_NAMESPACE, HumanTaskConstants.EMAIL_OR_SMS_BODY_TAG);
if (log.isDebugEnabled()) {
log.debug("Parsing SMS notification rendering element 'body' for notification id " + task.getId());
}
if (smsBodyList != null && smsBodyList.getLength() > 0) {
smsBody = smsBodyList.item(0).getTextContent();
} else {
log.warn("SMS notification rendering element 'body' not specified for notification with id " + task.getId());
}
dynamicPropertiesForSms.put(HumanTaskConstants.ARRAY_SMS_NO, smsReceiver);
String adaptorName = getAdaptorName(task.getName(), HumanTaskConstants.RENDERING_TYPE_SMS);
if (!smsAdapterNames.contains(adaptorName)) {
OutputEventAdapterConfiguration outputEventAdapterConfiguration = createOutputEventAdapterConfiguration(adaptorName, HumanTaskConstants.RENDERING_TYPE_SMS, HumanTaskConstants.SMS_MESSAGE_FORMAT);
try {
HumanTaskServiceComponent.getOutputEventAdapterService().create(outputEventAdapterConfiguration);
smsAdapterNames.add(adaptorName);
} catch (OutputEventAdapterException e) {
log.error("Unable to create Output Event Adapter : " + adaptorName, e);
}
}
HumanTaskServiceComponent.getOutputEventAdapterService().publish(adaptorName, dynamicPropertiesForSms, smsBody);
// smsAdapter.publish(smsBody, dynamicPropertiesForSms);
}
} else {
log.warn("SMS Rendering type not found for task definition with task id " + task.getId());
}
}
use of org.wso2.carbon.identity.mgt.mail.Notification in project carbon-business-process by wso2.
the class NotificationScheduler method publishEmailNotifications.
/**
* Publish Email notifications by extracting the information from the incoming message rendering tags
* <htd:renderings>
* <htd:rendering type="wso2:email" xmlns:wso2="http://wso2.org/ht/schema/renderings/">
* <wso2:to name="to" type="xsd:string">wso2bpsemail@wso2.com</wso2:to>
* <wso2:subject name="subject" type="xsd:string">email subject to user</wso2:subject>
* <wso2:body name="body" type="xsd:string">Hi email notifications</wso2:body>
* </htd:rendering>
* <htd:rendering type="wso2:sms" xmlns:wso2="http://wso2.org/ht/schema/renderings/">
* <wso2:receiver name="receiver" type="xsd:string">94777459299</wso2:receiver>
* <wso2:body name="body" type="xsd:string">Hi $firstname$</wso2:body>
* </htd:rendering>
*</htd:renderings>
*
* @param task TaskDAO object for this notification task instance
* @param taskConfiguration task configuration instance for this notification task definition
*/
public void publishEmailNotifications(TaskDAO task, HumanTaskBaseConfiguration taskConfiguration) throws IOException, SAXException, ParserConfigurationException {
String rendering = CommonTaskUtil.getRendering(task, taskConfiguration, new QName(HumanTaskConstants.RENDERING_NAMESPACE, HumanTaskConstants.RENDERING_TYPE_EMAIL));
if (rendering != null) {
Map<String, String> dynamicPropertiesForEmail = new HashMap<String, String>();
Element root = DOMUtils.stringToDOM(rendering);
if (root != null) {
String emailBody = null;
String mailSubject = null;
String mailTo = null;
String contentType = null;
NodeList mailToList = root.getElementsByTagNameNS(HumanTaskConstants.RENDERING_NAMESPACE, HumanTaskConstants.EMAIL_TO_TAG);
if (log.isDebugEnabled()) {
log.debug("Parsing Email notification rendering element to for notification id " + task.getId());
}
if (mailToList != null && mailToList.getLength() > 0) {
mailTo = mailToList.item(0).getTextContent();
} else {
log.warn("Email to address not specified for email notification with notification id " + task.getId());
}
NodeList mailSubjectList = root.getElementsByTagNameNS(HumanTaskConstants.RENDERING_NAMESPACE, HumanTaskConstants.EMAIL_SUBJECT_TAG);
if (log.isDebugEnabled()) {
log.debug("Paring Email notification rendering element subject " + task.getId());
}
if (mailSubjectList != null && mailSubjectList.getLength() > 0) {
mailSubject = mailSubjectList.item(0).getTextContent();
} else {
log.warn("Email subject not specified for email notification with notification id " + task.getId());
}
NodeList mailContentType = root.getElementsByTagNameNS(HumanTaskConstants.RENDERING_NAMESPACE, HumanTaskConstants.EMAIL_CONTENT_TYPE_TAG);
if (log.isDebugEnabled()) {
log.debug("Paring Email notification rendering element contentType " + task.getId());
}
if (mailContentType != null && mailContentType.getLength() > 0) {
contentType = mailContentType.item(0).getTextContent();
} else {
contentType = HumanTaskConstants.CONTENT_TYPE_TEXT_PLAIN;
log.warn("Email contentType not specified for email notification with notification id " + task.getId() + ". Using text/plain.");
}
if (log.isDebugEnabled()) {
log.debug("Parsing Email notification rendering element body tag for notification id " + task.getId());
}
NodeList emailBodyList = root.getElementsByTagNameNS(HumanTaskConstants.RENDERING_NAMESPACE, HumanTaskConstants.EMAIL_OR_SMS_BODY_TAG);
if (emailBodyList != null && emailBodyList.getLength() > 0) {
emailBody = emailBodyList.item(0).getTextContent();
} else {
log.warn("Email notification message body not specified for notification with id " + task.getId());
}
dynamicPropertiesForEmail.put(HumanTaskConstants.ARRAY_EMAIL_ADDRESS, mailTo);
dynamicPropertiesForEmail.put(HumanTaskConstants.ARRAY_EMAIL_SUBJECT, mailSubject);
dynamicPropertiesForEmail.put(HumanTaskConstants.ARRAY_EMAIL_TYPE, contentType);
String adaptorName = getAdaptorName(task.getName(), HumanTaskConstants.RENDERING_TYPE_EMAIL);
if (!emailAdapterNames.contains(adaptorName)) {
OutputEventAdapterConfiguration outputEventAdapterConfiguration = createOutputEventAdapterConfiguration(adaptorName, HumanTaskConstants.RENDERING_TYPE_EMAIL, HumanTaskConstants.EMAIL_MESSAGE_FORMAT);
try {
HumanTaskServiceComponent.getOutputEventAdapterService().create(outputEventAdapterConfiguration);
emailAdapterNames.add(adaptorName);
} catch (OutputEventAdapterException e) {
log.error("Unable to create Output Event Adapter : " + adaptorName, e);
}
}
HumanTaskServiceComponent.getOutputEventAdapterService().publish(adaptorName, dynamicPropertiesForEmail, emailBody);
// emailAdapter.publish(emailBody, dynamicPropertiesForEmail);
}
} else {
log.warn("Email Rendering type not found for task definition with task id " + task.getId());
}
}
Aggregations