Repository: juddi
Updated Branches:
  refs/heads/master d3710612f -> f7db6df07


JUDDI-861 implemented, but needs testing


Project: http://git-wip-us.apache.org/repos/asf/juddi/repo
Commit: http://git-wip-us.apache.org/repos/asf/juddi/commit/f7db6df0
Tree: http://git-wip-us.apache.org/repos/asf/juddi/tree/f7db6df0
Diff: http://git-wip-us.apache.org/repos/asf/juddi/diff/f7db6df0

Branch: refs/heads/master
Commit: f7db6df0761e2114b6060f1bb9d3cf69c2784b73
Parents: d371061
Author: Alex <[email protected]>
Authored: Mon Jan 19 19:53:33 2015 -0500
Committer: Alex <[email protected]>
Committed: Mon Jan 19 19:53:33 2015 -0500

----------------------------------------------------------------------
 .../juddi/api/impl/AuthenticatedService.java    |   1 -
 .../org/apache/juddi/api/impl/JUDDIApiImpl.java |  13 +-
 .../juddi/subscription/notify/SMTPNotifier.java |   7 +-
 .../notify/TemporaryMailContainer.java          |  61 +++++++
 .../notify/USERFRIENDLYSMTPNotifier.java        | 173 +++++++++++++++----
 .../src/main/resources/messages.properties      |   1 +
 6 files changed, 219 insertions(+), 37 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/juddi/blob/f7db6df0/juddi-core/src/main/java/org/apache/juddi/api/impl/AuthenticatedService.java
----------------------------------------------------------------------
diff --git 
a/juddi-core/src/main/java/org/apache/juddi/api/impl/AuthenticatedService.java 
b/juddi-core/src/main/java/org/apache/juddi/api/impl/AuthenticatedService.java
index 7a4c334..6d16d98 100644
--- 
a/juddi-core/src/main/java/org/apache/juddi/api/impl/AuthenticatedService.java
+++ 
b/juddi-core/src/main/java/org/apache/juddi/api/impl/AuthenticatedService.java
@@ -35,7 +35,6 @@ import org.apache.juddi.v3.auth.AuthenticatorFactory;
 import org.apache.juddi.v3.error.AuthTokenRequiredException;
 import org.apache.juddi.v3.error.AuthTokenExpiredException;
 import org.apache.juddi.v3.error.ErrorMessage;
-import org.apache.juddi.v3.error.UnknownUserException;
 import org.uddi.v3_service.DispositionReportFaultMessage;
 
 /**

http://git-wip-us.apache.org/repos/asf/juddi/blob/f7db6df0/juddi-core/src/main/java/org/apache/juddi/api/impl/JUDDIApiImpl.java
----------------------------------------------------------------------
diff --git 
a/juddi-core/src/main/java/org/apache/juddi/api/impl/JUDDIApiImpl.java 
b/juddi-core/src/main/java/org/apache/juddi/api/impl/JUDDIApiImpl.java
index ca69eba..3395dc7 100644
--- a/juddi-core/src/main/java/org/apache/juddi/api/impl/JUDDIApiImpl.java
+++ b/juddi-core/src/main/java/org/apache/juddi/api/impl/JUDDIApiImpl.java
@@ -83,6 +83,8 @@ import org.apache.juddi.model.Tmodel;
 import org.apache.juddi.model.UddiEntityPublisher;
 import org.apache.juddi.replication.ReplicationNotifier;
 import org.apache.juddi.subscription.NotificationList;
+import org.apache.juddi.subscription.notify.TemporaryMailContainer;
+import org.apache.juddi.subscription.notify.USERFRIENDLYSMTPNotifier;
 import org.apache.juddi.v3.client.transport.Transport;
 import org.apache.juddi.v3.error.ErrorMessage;
 import org.apache.juddi.v3.error.FatalErrorException;
@@ -1173,16 +1175,23 @@ public class JUDDIApiImpl extends AuthenticatedService 
implements JUDDIApiPortTy
                                 throw new UserMismatchException(new 
ErrorMessage("errors.AdminReqd"));
                         }
                         //new 
ValidateSubscription(publisher).validateDeleteSubscription(em, body);
-
+                        List<TemporaryMailContainer> notifications = new 
ArrayList<TemporaryMailContainer>();
                         List<String> subscriptionKeyList = subscriptionKey;
                         for (String key : subscriptionKeyList) {
                                 if (key != null && key.length() > 0) {
-                                        Object obj = 
em.find(org.apache.juddi.model.Subscription.class, key);
+                                        org.apache.juddi.model.Subscription 
obj = em.find(org.apache.juddi.model.Subscription.class, key);
+                                        Publisher publisher = 
em.find(Publisher.class, obj.getAuthorizedName());
+                                        notifications.add(new 
TemporaryMailContainer(obj, publisher, (Publisher) requestor));
                                         em.remove(obj);
                                 }
                         }
 
                         tx.commit();
+                        for (TemporaryMailContainer t:notifications){
+                                 
USERFRIENDLYSMTPNotifier.notifySubscriptionDeleted(t);
+                        }
+                       notifications.clear();
+                       notifications=null;
                         long procTime = System.currentTimeMillis() - startTime;
                         serviceCounter.update(JUDDIQuery.ADMIN_DELETE_SUB,
                                 QueryStatus.SUCCESS, procTime);

http://git-wip-us.apache.org/repos/asf/juddi/blob/f7db6df0/juddi-core/src/main/java/org/apache/juddi/subscription/notify/SMTPNotifier.java
----------------------------------------------------------------------
diff --git 
a/juddi-core/src/main/java/org/apache/juddi/subscription/notify/SMTPNotifier.java
 
b/juddi-core/src/main/java/org/apache/juddi/subscription/notify/SMTPNotifier.java
index 0bb301a..1b5138c 100644
--- 
a/juddi-core/src/main/java/org/apache/juddi/subscription/notify/SMTPNotifier.java
+++ 
b/juddi-core/src/main/java/org/apache/juddi/subscription/notify/SMTPNotifier.java
@@ -35,6 +35,7 @@ import javax.mail.internet.InternetAddress;
 import javax.mail.internet.MimeMessage;
 
 import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.lang.StringEscapeUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.juddi.api_v3.AccessPointType;
@@ -63,13 +64,13 @@ import org.uddi.v3_service.DispositionReportFaultMessage;
  */
 public class SMTPNotifier implements Notifier {
 
-       Log log = LogFactory.getLog(this.getClass());
+       static final Log log = LogFactory.getLog(SMTPNotifier.class);
        String notificationEmailAddress = null;
        //String from = null;
        Session session = null;
        Properties properties = null;
 
-       private final static String[] mailProps = {"mail.smtp.from", 
"mail.smtp.host", "mail.smtp.port", 
+       protected final static String[] mailProps = {"mail.smtp.from", 
"mail.smtp.host", "mail.smtp.port", 
                "mail.smtp.socketFactory.class", 
"mail.smtp.socketFactory.fallback", "mail.smtp.starttls.enable",
                
"mail.smtp.socketFactory.port","mail.smtp.auth","mail.smtp.user","mail.smtp.password","mail.debug"};
 
@@ -160,7 +161,7 @@ public class SMTPNotifier implements Notifier {
                                message.setText(subscriptionResultXML, "UTF-8");
                                 //message.setContent(subscriptionResultXML, 
"text/xml; charset=UTF-8;");
                                
message.setSubject(ResourceConfig.getGlobalMessage("notifications.smtp.default.subject")
 + " " 
-                                               + 
body.getSubscriptionResultsList().getSubscription().getSubscriptionKey());
+                                               + 
StringEscapeUtils.escapeHtml(body.getSubscriptionResultsList().getSubscription().getSubscriptionKey()));
                                Transport.send(message);
                        }
                         else throw new DispositionReportFaultMessage("Session 
is null!", null);

http://git-wip-us.apache.org/repos/asf/juddi/blob/f7db6df0/juddi-core/src/main/java/org/apache/juddi/subscription/notify/TemporaryMailContainer.java
----------------------------------------------------------------------
diff --git 
a/juddi-core/src/main/java/org/apache/juddi/subscription/notify/TemporaryMailContainer.java
 
b/juddi-core/src/main/java/org/apache/juddi/subscription/notify/TemporaryMailContainer.java
new file mode 100644
index 0000000..e3f5205
--- /dev/null
+++ 
b/juddi-core/src/main/java/org/apache/juddi/subscription/notify/TemporaryMailContainer.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2015 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.juddi.subscription.notify;
+
+import org.apache.juddi.model.Publisher;
+import org.apache.juddi.model.Subscription;
+
+/**
+ *
+ * @author alex
+ */
+public class TemporaryMailContainer {
+
+        public TemporaryMailContainer(Subscription obj, Publisher publisher, 
Publisher deletedBy) {
+
+                this.obj=obj;
+                this.publisher = publisher;
+                this.deletedBy=deletedBy;
+        }
+        private Subscription obj;
+        private Publisher publisher;
+        private Publisher deletedBy;
+
+
+        public Subscription getObj() {
+                return obj;
+        }
+
+        public void setObj(Subscription obj) {
+                this.obj = obj;
+        }
+
+        public Publisher getPublisher() {
+                return publisher;
+        }
+
+        public void setPublisher(Publisher publisher) {
+                this.publisher = publisher;
+        }
+
+        public Publisher getDeletedBy() {
+                return deletedBy;
+        }
+
+        public void setDeletedBy(Publisher deletedBy) {
+                this.deletedBy = deletedBy;
+        }
+}

http://git-wip-us.apache.org/repos/asf/juddi/blob/f7db6df0/juddi-core/src/main/java/org/apache/juddi/subscription/notify/USERFRIENDLYSMTPNotifier.java
----------------------------------------------------------------------
diff --git 
a/juddi-core/src/main/java/org/apache/juddi/subscription/notify/USERFRIENDLYSMTPNotifier.java
 
b/juddi-core/src/main/java/org/apache/juddi/subscription/notify/USERFRIENDLYSMTPNotifier.java
index c6fffd1..443e102 100644
--- 
a/juddi-core/src/main/java/org/apache/juddi/subscription/notify/USERFRIENDLYSMTPNotifier.java
+++ 
b/juddi-core/src/main/java/org/apache/juddi/subscription/notify/USERFRIENDLYSMTPNotifier.java
@@ -19,9 +19,20 @@ package org.apache.juddi.subscription.notify;
 import java.io.StringWriter;
 import java.net.URISyntaxException;
 import java.rmi.RemoteException;
+import java.security.InvalidAlgorithmParameterException;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Properties;
+import javax.crypto.BadPaddingException;
+import javax.crypto.IllegalBlockSizeException;
+import javax.crypto.NoSuchPaddingException;
 import javax.mail.Address;
 import javax.mail.Message.RecipientType;
 import javax.mail.Multipart;
+import javax.mail.PasswordAuthentication;
+import javax.mail.Session;
 import javax.mail.Transport;
 import javax.mail.internet.InternetAddress;
 import javax.mail.internet.MimeBodyPart;
@@ -33,8 +44,12 @@ import org.apache.commons.lang.StringEscapeUtils;
 import org.apache.juddi.config.AppConfig;
 import org.apache.juddi.config.Property;
 import org.apache.juddi.config.ResourceConfig;
+import org.apache.juddi.cryptor.CryptorFactory;
 import org.apache.juddi.jaxb.JAXBMarshaller;
+import org.apache.juddi.mapping.MappingModelToApi;
 import org.apache.juddi.model.BindingTemplate;
+import org.apache.juddi.model.Publisher;
+import org.apache.juddi.model.Subscription;
 import org.uddi.api_v3.DispositionReport;
 import org.uddi.api_v3.Result;
 import org.uddi.sub_v3.SubscriptionFilter;
@@ -54,9 +69,112 @@ import org.uddi.v3_service.DispositionReportFaultMessage;
  * The following properties can be set juddiv3.xml.
  *
  * @author Kurt Stam
+ * @author Alex O'Ree
  */
 public class USERFRIENDLYSMTPNotifier extends SMTPNotifier {
 
+        public static void notifySubscriptionDeleted(TemporaryMailContainer 
container) {
+                try {
+                        Publisher publisher=container.getPublisher();
+                        Publisher deletedBy = container.getDeletedBy();
+                        Subscription obj = container.getObj();
+                                
+                        Properties properties = new Properties();
+                        Session session = null;
+                        String mailPrefix = 
AppConfig.getConfiguration().getString(Property.JUDDI_EMAIL_PREFIX, 
Property.DEFAULT_JUDDI_EMAIL_PREFIX);
+                        if (!mailPrefix.endsWith(".")) {
+                                mailPrefix = mailPrefix + ".";
+                        }
+                        for (String key : mailProps) {
+                                if 
(AppConfig.getConfiguration().containsKey(mailPrefix + key)) {
+                                        properties.put(key, 
AppConfig.getConfiguration().getProperty(mailPrefix + key));
+                                } else if (System.getProperty(mailPrefix + 
key) != null) {
+                                        properties.put(key, 
System.getProperty(mailPrefix + key));
+                                }
+                        }
+                        String emailaddress = publisher.getEmailAddress();
+                        boolean auth = 
(properties.getProperty("mail.smtp.auth", "false")).equalsIgnoreCase("true");
+                        if (auth) {
+                                final String username = 
properties.getProperty("mail.smtp.user");
+                                String pwd = 
properties.getProperty("mail.smtp.password");
+                                //decrypt if possible
+                                if 
(properties.getProperty("mail.smtp.password" + Property.ENCRYPTED_ATTRIBUTE, 
"false").equalsIgnoreCase("true")) {
+                                        try {
+                                                pwd = 
CryptorFactory.getCryptor().decrypt(pwd);
+                                        } catch (NoSuchPaddingException ex) {
+                                                log.error("Unable to decrypt 
settings", ex);
+                                        } catch (NoSuchAlgorithmException ex) {
+                                                log.error("Unable to decrypt 
settings", ex);
+                                        } catch 
(InvalidAlgorithmParameterException ex) {
+                                                log.error("Unable to decrypt 
settings", ex);
+                                        } catch (InvalidKeyException ex) {
+                                                log.error("Unable to decrypt 
settings", ex);
+                                        } catch (IllegalBlockSizeException ex) 
{
+                                                log.error("Unable to decrypt 
settings", ex);
+                                        } catch (BadPaddingException ex) {
+                                                log.error("Unable to decrypt 
settings", ex);
+                                        }
+                                }
+                                final String password = pwd;
+                                log.debug("SMTP username = " + username + " 
from address = " + emailaddress);
+                                Properties eMailProperties = properties;
+                                eMailProperties.remove("mail.smtp.user");
+                                eMailProperties.remove("mail.smtp.password");
+                                session = Session.getInstance(properties, new 
javax.mail.Authenticator() {
+                                        protected PasswordAuthentication 
getPasswordAuthentication() {
+                                                return new 
PasswordAuthentication(username, password);
+                                        }
+                                });
+                        } else {
+                                Properties eMailProperties = properties;
+                                eMailProperties.remove("mail.smtp.user");
+                                eMailProperties.remove("mail.smtp.password");
+                                session = Session.getInstance(eMailProperties);
+                        }
+
+                        MimeMessage message = new MimeMessage(session);
+                        InternetAddress address = new 
InternetAddress(emailaddress);
+                        Address[] to = {address};
+                        message.setRecipients(RecipientType.TO, to);
+                        message.setFrom(new 
InternetAddress(properties.getProperty("mail.smtp.from", "jUDDI")));
+                                //Hello %s,<br><br>Your subscription UDDI 
subscription was deleted. Attached is what the subscription was. It was deleted 
by %s, %s at %s. This node is %s
+                        //maybe nice to use a template rather then sending raw 
xml.
+                        org.uddi.sub_v3.Subscription api = new 
org.uddi.sub_v3.Subscription();
+                        MappingModelToApi.mapSubscription(obj, api);
+                        String subscriptionResultXML = 
JAXBMarshaller.marshallToString(api, JAXBMarshaller.PACKAGE_SUBSCR_RES);
+                        Multipart mp = new MimeMultipart();
+
+                        MimeBodyPart content = new MimeBodyPart();
+                        String msg_content = 
ResourceConfig.getGlobalMessage("notifications.smtp.subscriptionDeleted");
+                        SimpleDateFormat sdf = new 
SimpleDateFormat("yyyy-MM-ddTkk:mm:ssZ");
+//Hello %s,<br><br>Your subscription UDDI subscription was deleted. Attached 
is what the subscription was. It was deleted by %s, %s at %s. This node is %s
+                        msg_content = String.format(msg_content,
+                                
StringEscapeUtils.escapeHtml(publisher.getPublisherName()),
+                                
StringEscapeUtils.escapeHtml(publisher.getAuthorizedName()),
+                                
StringEscapeUtils.escapeHtml(deletedBy.getPublisherName()),
+                                
StringEscapeUtils.escapeHtml(deletedBy.getAuthorizedName()),
+                                StringEscapeUtils.escapeHtml(sdf.format(new 
Date())),
+                                
StringEscapeUtils.escapeHtml(AppConfig.getConfiguration().getString(Property.JUDDI_NODE_ID,
 "(unknown node id!)"))
+                        );
+
+                        content.setContent(msg_content, "text/html; 
charset=UTF-8;");
+                        mp.addBodyPart(content);
+
+                        MimeBodyPart attachment = new MimeBodyPart();
+                        attachment.setContent(subscriptionResultXML, 
"text/xml; charset=UTF-8;");
+                        attachment.setFileName("uddiNotification.xml");
+                        mp.addBodyPart(attachment);
+
+                        message.setContent(mp);
+                        
message.setSubject(ResourceConfig.getGlobalMessage("notifications.smtp.userfriendly.subject")
 + " "
+                                + 
StringEscapeUtils.escapeHtml(obj.getSubscriptionKey()));
+                        Transport.send(message);
+
+                } catch (Throwable t) {
+                        log.error(t);
+                }
+        }
+
         public USERFRIENDLYSMTPNotifier(BindingTemplate bindingTemplate) 
throws URISyntaxException, Exception {
                 super(bindingTemplate);
                 publisherName = bindingTemplate.getAuthorizedName();
@@ -78,30 +196,31 @@ public class USERFRIENDLYSMTPNotifier extends SMTPNotifier 
{
                                 //maybe nice to use a template rather then 
sending raw xml.
                                 String subscriptionResultXML = 
JAXBMarshaller.marshallToString(body, JAXBMarshaller.PACKAGE_SUBSCR_RES);
                                 Multipart mp = new MimeMultipart();
-                                
+
                                 MimeBodyPart content = new MimeBodyPart();
                                 String msg_content = 
ResourceConfig.getGlobalMessage("notifications.smtp.userfriendly.body");
 
                                 msg_content = String.format(msg_content,
-                                     
StringEscapeUtils.escapeHtml(this.publisherName),
-                                     
StringEscapeUtils.escapeHtml(AppConfig.getConfiguration().getString(Property.JUDDI_NODE_ID,
 "(unknown node id!)")),
-                                     GetSubscriptionType(body),
-                                     GetChangeSummary(body));
-                                
+                                        
StringEscapeUtils.escapeHtml(this.publisherName),
+                                        
StringEscapeUtils.escapeHtml(AppConfig.getConfiguration().getString(Property.JUDDI_NODE_ID,
 "(unknown node id!)")),
+                                        GetSubscriptionType(body),
+                                        GetChangeSummary(body));
+
                                 content.setContent(msg_content, "text/html; 
charset=UTF-8;");
                                 mp.addBodyPart(content);
-                                
+
                                 MimeBodyPart attachment = new MimeBodyPart();
                                 attachment.setContent(subscriptionResultXML, 
"text/xml; charset=UTF-8;");
                                 attachment.setFileName("uddiNotification.xml");
                                 mp.addBodyPart(attachment);
-                                
+
                                 message.setContent(mp);
                                 
message.setSubject(ResourceConfig.getGlobalMessage("notifications.smtp.userfriendly.subject")
 + " "
-                                     + 
body.getSubscriptionResultsList().getSubscription().getSubscriptionKey());
+                                        + 
body.getSubscriptionResultsList().getSubscription().getSubscriptionKey());
                                 Transport.send(message);
+                        } else {
+                                throw new 
DispositionReportFaultMessage("Session is null!", null);
                         }
-                        else throw new DispositionReportFaultMessage("Session 
is null!", null);
                 } catch (Exception e) {
                         log.error(e.getMessage(), e);
                         throw new 
DispositionReportFaultMessage(e.getMessage(), null);
@@ -117,42 +236,34 @@ public class USERFRIENDLYSMTPNotifier extends 
SMTPNotifier {
         static String GetChangeSummary(NotifySubscriptionListener body) {
                 SubscriptionResultsList r = body.getSubscriptionResultsList();
                 StringWriter sw = new StringWriter();
-                
+
                 if (r.getAssertionStatusReport() != null) {
                         JAXB.marshal(r.getAssertionStatusReport(), sw);
-                }
-                else if (r.getBindingDetail() != null) {
+                } else if (r.getBindingDetail() != null) {
                         JAXB.marshal(r.getBindingDetail(), sw);
-                }
-                else if (r.getBusinessDetail() != null) {
+                } else if (r.getBusinessDetail() != null) {
                         JAXB.marshal(r.getBusinessDetail(), sw);
-                }
-                else if (r.getBusinessList() != null) {
+                } else if (r.getBusinessList() != null) {
                         JAXB.marshal(r.getBusinessList(), sw);
-                }
-                else if (r.getRelatedBusinessesList() != null) {
+                } else if (r.getRelatedBusinessesList() != null) {
                         JAXB.marshal(r.getRelatedBusinessesList(), sw);
-                }
-                else if (r.getServiceDetail() != null) {
+                } else if (r.getServiceDetail() != null) {
                         JAXB.marshal(r.getServiceDetail(), sw);
-                }
-                else if (r.getServiceList() != null) {
+                } else if (r.getServiceList() != null) {
                         JAXB.marshal(r.getServiceList(), sw);
-                }
-                else if (r.getTModelDetail() != null) {
+                } else if (r.getTModelDetail() != null) {
                         JAXB.marshal(r.getTModelDetail(), sw);
-                }
-                else if (r.getTModelList() != null) {
+                } else if (r.getTModelList() != null) {
                         JAXB.marshal(r.getTModelList(), sw);
                 }
-                
-                return "<pre>" +StringEscapeUtils.escapeHtml(sw.toString()) + 
"</pre>";
+
+                return "<pre>" + StringEscapeUtils.escapeHtml(sw.toString()) + 
"</pre>";
         }
 
         static String GetSubscriptionType(NotifySubscriptionListener body) {
                 if (body != null && body.getSubscriptionResultsList() != null
-                     && body.getSubscriptionResultsList().getSubscription() != 
null
-                     && 
body.getSubscriptionResultsList().getSubscription().getSubscriptionFilter() != 
null) {
+                        && body.getSubscriptionResultsList().getSubscription() 
!= null
+                        && 
body.getSubscriptionResultsList().getSubscription().getSubscriptionFilter() != 
null) {
                         SubscriptionFilter sub = 
body.getSubscriptionResultsList().getSubscription().getSubscriptionFilter();
                         if (sub.getFindBinding() != null) {
                                 return " binding search results";

http://git-wip-us.apache.org/repos/asf/juddi/blob/f7db6df0/juddi-core/src/main/resources/messages.properties
----------------------------------------------------------------------
diff --git a/juddi-core/src/main/resources/messages.properties 
b/juddi-core/src/main/resources/messages.properties
index 5b52e16..a417c0d 100644
--- a/juddi-core/src/main/resources/messages.properties
+++ b/juddi-core/src/main/resources/messages.properties
@@ -282,6 +282,7 @@ notifications.smtp.default.subject=UDDI Subscription 
Notification for subscripti
 
 notifications.smtp.userfriendly.subject=UDDI Subscription Notification for 
subscription 
 notifications.smtp.userfriendly.body=Hello %s,<br><br>You are currently 
registered to receive subscription updates in the UDDI Node <b>%s</b> for %s. A 
change was registered that triggered an update notification to be sent. The 
attachment contains the XML containing the details of the 
change.<br><br><b>Summary of changes</b>: <br><br>%s
+notifications.smtp.subscriptionDeleted=Hello %s,<br><br>Your subscription UDDI 
subscription was deleted. Attached is what the subscription was. It was deleted 
by %s, %s at %s. This node is %s
 #username
 #node
 #search results or a specific item


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to