Author: jaz
Date: Wed May 13 04:58:24 2009 New Revision: 774196 URL: http://svn.apache.org/viewvc?rev=774196&view=rev Log: minor changes to make sure the sendMail service is called through the service engine instead of as a method call; sendMail now returns a MimeMessageWrapper object with all the mail information to be used by communication event processing Modified: ofbiz/trunk/framework/common/script/org/ofbiz/common/email/EmailServices.xml ofbiz/trunk/framework/common/servicedef/services_email.xml ofbiz/trunk/framework/common/src/org/ofbiz/common/email/EmailServices.java Modified: ofbiz/trunk/framework/common/script/org/ofbiz/common/email/EmailServices.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/script/org/ofbiz/common/email/EmailServices.xml?rev=774196&r1=774195&r2=774196&view=diff ============================================================================== --- ofbiz/trunk/framework/common/script/org/ofbiz/common/email/EmailServices.xml (original) +++ ofbiz/trunk/framework/common/script/org/ofbiz/common/email/EmailServices.xml Wed May 13 04:58:24 2009 @@ -43,6 +43,7 @@ <!-- copy the incoming parameter fields AFTER setting the ones from EmailTemplateSetting so they can override things like subject, sendFrom, etc --> <set-service-fields service-name="sendMailFromScreen" map="parameters" to-map="emailParams"/> <call-service service-name="sendMailFromScreen" in-map-name="emailParams"> + <result-to-result result-name="messageWrapper"/> <result-to-result result-name="body"/> </call-service> <else> Modified: ofbiz/trunk/framework/common/servicedef/services_email.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/servicedef/services_email.xml?rev=774196&r1=774195&r2=774196&view=diff ============================================================================== --- ofbiz/trunk/framework/common/servicedef/services_email.xml (original) +++ ofbiz/trunk/framework/common/servicedef/services_email.xml Wed May 13 04:58:24 2009 @@ -40,14 +40,16 @@ <attribute name="partyId" type="String" mode="INOUT" optional="true"/> <attribute name="messageId" type="String" mode="INOUT" optional="true"/> <attribute name="emailType" type="String" mode="INOUT" optional="true"/> + <attribute name="messageWrapper" type="org.ofbiz.service.mail.MimeMessageWrapper" mode="OUT"/> + <!-- used for parsing and ECAs --> + <attribute name="communicationEventId" type="String" mode="INOUT" optional="true"/> </service> <service name="sendMail" engine="java" location="org.ofbiz.common.email.EmailServices" invoke="sendMail"> <description>Send E-Mail Service. partyId and communicationEventId aren't used by sendMail but are passed down to storeEmailAsCommunication during the SECA chain. See sendMailInterface for more comments.</description> <implements service="sendMailInterface"/> - <attribute name="body" type="String" mode="INOUT" optional="false" allow-html="any"/> - <attribute name="communicationEventId" type="String" mode="INOUT" optional="true"/> + <attribute name="body" type="String" mode="INOUT" optional="false" allow-html="any"/> <override name="contentType" mode="INOUT"/> <override name="subject" mode="INOUT" optional="false"/> <override name="emailType" type="String" mode="INOUT" optional="true"/> Modified: ofbiz/trunk/framework/common/src/org/ofbiz/common/email/EmailServices.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/src/org/ofbiz/common/email/EmailServices.java?rev=774196&r1=774195&r2=774196&view=diff ============================================================================== --- ofbiz/trunk/framework/common/src/org/ofbiz/common/email/EmailServices.java (original) +++ ofbiz/trunk/framework/common/src/org/ofbiz/common/email/EmailServices.java Wed May 13 04:58:24 2009 @@ -31,7 +31,6 @@ import java.net.URL; import java.security.Security; import java.util.Date; -import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Map; @@ -52,7 +51,6 @@ import javax.xml.transform.stream.StreamSource; import javolution.util.FastList; - import org.apache.fop.apps.FOPException; import org.apache.fop.apps.Fop; import org.apache.fop.apps.MimeConstants; @@ -68,8 +66,10 @@ import org.ofbiz.base.util.string.FlexibleStringExpander; import org.ofbiz.entity.GenericValue; import org.ofbiz.service.DispatchContext; +import org.ofbiz.service.GenericServiceException; import org.ofbiz.service.LocalDispatcher; import org.ofbiz.service.ServiceUtil; +import org.ofbiz.service.mail.MimeMessageWrapper; import org.ofbiz.webapp.view.ApacheFopWorker; import org.ofbiz.widget.fo.FoScreenRenderer; import org.ofbiz.widget.html.HtmlScreenRenderer; @@ -93,6 +93,10 @@ *@return Map with the result of the service, the output parameters */ public static Map<String, Object> sendMail(DispatchContext ctx, Map<String, ? extends Object> context) { + String communicationEventId = (String) context.get("communicationEventId"); + if (communicationEventId != null) { + Debug.logInfo("SendMail Running, for communicationEventId : " + communicationEventId, module); + } Map<String, Object> results = ServiceUtil.returnSuccess(); String subject = (String) context.get("subject"); String partyId = (String) context.get("partyId"); @@ -100,6 +104,7 @@ List<Map<String, Object>> bodyParts = UtilGenerics.checkList(context.get("bodyParts")); GenericValue userLogin = (GenericValue) context.get("userLogin"); + results.put("communicationEventId", communicationEventId); results.put("partyId", partyId); results.put("subject", subject); if (UtilValidate.isNotEmpty(body)) { @@ -286,6 +291,7 @@ trans.connect(sendVia, authUser, authPass); } trans.sendMessage(mail, mail.getAllRecipients()); + results.put("messageWrapper", new MimeMessageWrapper(session, mail)); results.put("messageId", mail.getMessageID()); trans.close(); } catch (SendFailedException e) { @@ -310,12 +316,14 @@ *@param rcontext Map containing the input parameters *@return Map with the result of the service, the output parameters */ - public static Map<String, Object> sendMailFromUrl(DispatchContext ctx, Map<String, ? extends Object> rcontext) { - Map<String, Object> context = UtilMisc.makeMapWritable(rcontext); + public static Map<String, Object> sendMailFromUrl(DispatchContext ctx, Map<String, ? extends Object> rcontext) { // pretty simple, get the content and then call the sendMail method below - String bodyUrl = (String) context.remove("bodyUrl"); - Map<String, Object> bodyUrlParameters = UtilGenerics.checkMap(context.remove("bodyUrlParameters")); + Map<String, Object> sendMailContext = UtilMisc.makeMapWritable(rcontext); + String bodyUrl = (String) sendMailContext.remove("bodyUrl"); + Map<String, Object> bodyUrlParameters = UtilGenerics.checkMap(sendMailContext.remove("bodyUrlParameters")); + LocalDispatcher dispatcher = ctx.getDispatcher(); + URL url = null; try { @@ -334,12 +342,18 @@ Debug.logWarning(e, module); return ServiceUtil.returnError("Error getting content: " + e.toString()); } - - context.put("body", body); - Map<String, Object> result = sendMail(ctx, context); - - result.put("body", body); - return result; + + sendMailContext.put("body", body); + Map<String, Object> sendMailResult; + try { + sendMailResult = dispatcher.runSync("sendMail", sendMailContext); + } catch (GenericServiceException e) { + Debug.logError(e, module); + return ServiceUtil.returnError(e.getMessage()); + } + + // just return the same result; it contains all necessary information + return sendMailResult; } /** @@ -367,7 +381,10 @@ } else { locale = (Locale) bodyParameters.get("locale"); } - String partyId = (String) bodyParameters.get("partyId"); + String partyId = (String) serviceContext.get("partyId"); + if (partyId == null) { + partyId = (String) bodyParameters.get("partyId"); + } if (UtilValidate.isNotEmpty(webSiteId)) { NotificationServices.setBaseUrl(dctx.getDelegator(), webSiteId, bodyParameters); } @@ -504,17 +521,23 @@ if (Debug.verboseOn()) Debug.logVerbose("sendMailFromScreen sendMail context: " + serviceContext, module); Map<String, Object> result = ServiceUtil.returnSuccess(); + Map<String, Object> sendMailResult; try { if (isMultiPart) { - dispatcher.runSync("sendMailMultiPart", serviceContext); + sendMailResult = dispatcher.runSync("sendMailMultiPart", serviceContext); } else { - dispatcher.runSync("sendMail", serviceContext); + sendMailResult = dispatcher.runSync("sendMail", serviceContext); } } catch (Exception e) { String errMsg = "Error send email :" + e.toString(); Debug.logError(e, errMsg, module); return ServiceUtil.returnError(errMsg); } + if (ServiceUtil.isError(sendMailResult)) { + return ServiceUtil.returnError(ServiceUtil.getErrorMessage(sendMailResult)); + } + + result.put("messageWrapper", sendMailResult.get("messageWrapper")); result.put("body", bodyWriter.toString()); return result; } |
Free forum by Nabble | Edit this page |