private static void ExecuteProcess(HttpListenerContext context, Message message) { Logger.DebugFormat("Entry Url={0}", context.Request.Url); IModule module = null; try { // Reflection var plusRoute = new HttpRoute { Host = "+", Path = context.Request.Url.LocalPath, Port = context.Request.Url.Port }; var route = new HttpRoute { Host = context.Request.Url.Host, Path = context.Request.Url.LocalPath, Port = context.Request.Url.Port }; Type type; if (!RoutesConfig.ConfiguredRoutes.TryGetValue(plusRoute, out type)) if (!RoutesConfig.ConfiguredRoutes.TryGetValue(route, out type)) { throw new ModuleConfigurationException(String.Format("Could not find module for route={0}", route), null); } Logger.DebugFormat("Configured Module={0}", type.FullName); var ctor = type.GetConstructor(new Type[0]); module = (IModule) ctor.Invoke(new object[0]); // Process Logger.DebugFormat("Message process executing."); module.Process(message); Logger.DebugFormat("Message process performed."); } catch (Exception e) { Logger.Error(message.ToString(), e); if (module != null) module.ExceptionHandling(e, message); else message.SetPayload(e.ToString()); } }
public void Process(Message message) { message .GetItemAttributes(_plentyConnector) .ExtractVariable("//Attributes", "ItemAttributes", XmlExtensions.NodeType.Node) .LoadModuleResourceXml<Module>("PlentyConfig.xml") .ExtractVariable("//PlentyConfig", "PlentyConfig", XmlExtensions.NodeType.Node) .ExtractHost("//LeoveServer1/Host") .ExtractPort("//LeoveServer1/Port") .ExtractUsername("//LeoveServer1/Username") .ExtractPassword("//LeoveServer1/Password") .ExtractDatabase("//LeoveServer1/Database") .MsSqlSelect("SELECT DISTINCT TOP(1) Type FROM [CncEngine].[dbo].[TranslationTable] WHERE Type LIKE 'Size.%' ORDER BY Type") .SplitMessages("//Type") .ForEach(m => m .SetVariable("CurrentType", m.Payload.Value) .MsSqlSelect(String.Format("SELECT DISTINCT Term FROM [CncEngine].[dbo].[TranslationTable] WHERE Type = '{0}' ORDER BY Term", m.Payload.Value)) .SplitMessages("//Term") .ForEach(mm => mm .VariableToPayload("CurrentType") .AddToPayload(mm.Variables["PlentyConfig"]) .AddToPayload(mm.Variables["ItemAttributes"].XmlXPath("//item[BackendName='" + mm.Variables["CurrentType"] + "']").FirstOrDefault()) .XslTransformFromModuleResource<Module>("ItemAttributes/Login2AddItemAttribute.xsl") ) .Combine() //.VariableToPayload("CurrentType") //.Combine(mm => m.SetPayload(XElement.Parse(mm.Variables["PlentyConfig"].ToString()))) //.Combine(mm => m.SetPayload(mm.Variables["ItemAttributes"].ToString().ExtractXPath("//item[BackendName='" + mm.Variables["currentType"] + "']", XmlExtensions.NodeType.Node))) ) .Combine() .SetVariable("ContentType", "text/xml") ; }
public void ExceptionHandling(Exception ex, Message message) { //message.SetVariable("ExceptionPayload", message.Payload.ToString()); message.SetPayload("<Exception></Exception>"); }
public Message Clone() { var msg = new Message(); Variables.ToList().ForEach(v => msg.Variables.Add(v)); msg.Payload = Payload.Clone(); return msg; }
public static Message NoChange(Message message) { return message; }
public void Process(Message message) { message.GetItemAttributes(_plentyConnector); }