internal TransformMetaData FindFirstMapMatch(string message) { string[] mapsArray = _mapName.Split(new char[] { '|' }, StringSplitOptions.None); TransformMetaData mapMatch = null; for (int i = 0; i < mapsArray.Length; i++) { try { Type mapType = Type.GetType(mapsArray[i], true); TransformMetaData map = TransformMetaData.For(mapType); SchemaMetadata sourceSchema = map.SourceSchemas[0]; if (sourceSchema.SchemaName == message) { mapMatch = map; break; } } catch (Exception ex) { throw new ApplicationException(string.Format("Error while trying to load MapType specification: {0}", mapsArray[i]), ex); } } return(mapMatch); }
internal TransformMetaData FindFirstMapMatch(ContextProperty property, string messageType) { string[] mapsArray = _mapName.Split(new char[] { '|' }, StringSplitOptions.None); TransformMetaData mapMatch = null; //Check Cache if (Maps.ContainsKey(messageType)) { for (int i = 0; i < mapsArray.Length; i++) { if (Maps[messageType].TryGetValue(mapsArray[i], out mapMatch) == true) { return(mapMatch); } } } else { //Add cache for this messagetype Maps.TryAdd(messageType, new ConcurrentDictionary <string, TransformMetaData>()); } //Check MapCache for (int i = 0; i < mapsArray.Length; i++) { try { //When map exists in the same assembly as the pipeline you do not need to specify assembly if (mapsArray[i].Contains(",") == false) { mapsArray[i] = String.Format("{0}, {1}", mapsArray[i], pipelineAssembly); } Type mapType = Type.GetType(mapsArray[i], true); mapMatch = TransformMetaData.For(mapType); SchemaMetadata sourceSchema = mapMatch.SourceSchemas[0]; if (property.PropertyName == "SchemaStrongName") { if (sourceSchema.ReflectedType.AssemblyQualifiedName == messageType) { Maps[messageType].TryAdd(mapsArray[i], mapMatch); break; } } else if (property.PropertyName == "MessageType" && sourceSchema.SchemaName == messageType) { Maps[messageType].TryAdd(mapsArray[i], mapMatch); break; } mapMatch = null; } catch (Exception ex) { throw new ApplicationException(string.Format("Error while trying to load MapType specification: {0}", mapsArray[i]), ex); } } return(mapMatch); }