Skip to content

Commit 5becd8b

Browse files
author
Claudia Beatriz Murialdo Garrone
committed
Improve error handling in GXMetadata.cs when looking for an class in different name spaces.
1 parent 4c87d15 commit 5becd8b

File tree

2 files changed

+13
-8
lines changed

2 files changed

+13
-8
lines changed

dotnet/src/dotnetcore/GxClasses.Web/Middleware/HandlerFactory.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,7 @@ internal static Type GetHandlerType(string assemblyName, string className)
270270
try
271271
{
272272

273-
objType = GeneXus.Metadata.ClassLoader.FindType(assemblyName, className, null);
273+
objType = GeneXus.Metadata.ClassLoader.FindType(assemblyName, className, null, false, true);
274274
if (objType == null)
275275

276276
objType = Assembly.Load(new AssemblyName(assemblyName)).GetType(className);

dotnet/src/dotnetframework/GxClasses/Helpers/GXMetadata.cs

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -70,13 +70,13 @@ static public void Execute(object instance, string mthd, Object[] args)
7070
}
7171
}
7272
static ConcurrentDictionary<string, Type> loadedAssemblies = new ConcurrentDictionary<string, Type>();
73-
static public Type FindType(string defaultAssemblyName, string clss, Assembly defaultAssembly, bool ignoreCase = false)
73+
static public Type FindType(string defaultAssemblyName, string clss, Assembly defaultAssembly, bool ignoreCase = false, bool ignoreError=false)
7474
{
75-
return FindType(defaultAssemblyName, string.Empty, clss, defaultAssembly, ignoreCase);
75+
return FindType(defaultAssemblyName, string.Empty, clss, defaultAssembly, ignoreCase, ignoreError);
7676
}
7777
//ns = kb Namespace
7878
//clssWithoutNamespace = fullname genexus object (includes module), p.e. genexus.sd.synchronization.offlineeventreplicator
79-
static public Type FindType(string defaultAssemblyName, string ns, string clssWithoutNamespace, Assembly defaultAssembly, bool ignoreCase = false)
79+
static public Type FindType(string defaultAssemblyName, string ns, string clssWithoutNamespace, Assembly defaultAssembly, bool ignoreCase = false, bool ignoreError = false)
8080
{
8181

8282
string clss = string.IsNullOrEmpty(ns) ? clssWithoutNamespace : string.Format("{0}.{1}", ns, clssWithoutNamespace);
@@ -143,7 +143,7 @@ static public Type FindType(string defaultAssemblyName, string ns, string clssWi
143143
{
144144
if (ns != appNS)
145145
{
146-
return FindType(defaultAssemblyName, appNS, clssWithoutNamespace, defaultAssembly);
146+
return FindType(defaultAssemblyName, appNS, clssWithoutNamespace, defaultAssembly, ignoreCase, ignoreError);
147147
}
148148
}
149149
if (objType == null)
@@ -168,7 +168,7 @@ static public Type FindType(string defaultAssemblyName, string ns, string clssWi
168168
defaultAssemblyName = parts[1];
169169
clss = parts[0];
170170
}
171-
return FindType(defaultAssemblyName, string.Empty, clss, defaultAssembly);
171+
return FindType(defaultAssemblyName, string.Empty, clss, defaultAssembly, ignoreCase, ignoreError);
172172
}
173173
}
174174

@@ -207,8 +207,13 @@ static public Type FindType(string defaultAssemblyName, string ns, string clssWi
207207
}
208208
if (objType == null)
209209
{
210-
GXLogging.Error(log, "Failed to load type: " + clss + " from currentdomain");
211-
throw new GxClassLoaderException("Failed to load type: " + clss);
210+
if (ignoreError)
211+
GXLogging.Warn(log, "Failed to load type: " + clss + " from currentdomain");
212+
else
213+
{
214+
GXLogging.Error(log, "Failed to load type: " + clss + " from currentdomain");
215+
throw new GxClassLoaderException("Failed to load type: " + clss);
216+
}
212217
}
213218
return objType;
214219

0 commit comments

Comments
 (0)