@@ -378,7 +378,30 @@ private void resolveCreators()
378
378
List <AnnotatedMethod > creatorMethods = null ;
379
379
380
380
// Then static methods which are potential factory methods
381
- for (Method m : _class .getDeclaredMethods ()) {
381
+
382
+ Method [] classMethods ;
383
+ try {
384
+ classMethods = _class .getDeclaredMethods ();
385
+ }catch (final NoClassDefFoundError ex ){
386
+ // One of the methods had a class that was not found in the cls.getClassLoader.
387
+ // Maybe the developer was nice and has a different class loader for this context.
388
+ final ClassLoader loader = Thread .currentThread ().getContextClassLoader ();
389
+ if (loader == null ){
390
+ // Nope... this is going to end poorly
391
+ throw ex ;
392
+ }
393
+ final Class <?> contextClass ;
394
+ try {
395
+ contextClass = loader .loadClass (_class .getName ());
396
+ }
397
+ catch (ClassNotFoundException e ) {
398
+ ex .addSuppressed (e );
399
+ throw ex ;
400
+ }
401
+ classMethods = contextClass .getDeclaredMethods (); // Cross fingers
402
+ }
403
+
404
+ for (Method m : classMethods ) {
382
405
if (!Modifier .isStatic (m .getModifiers ())) {
383
406
continue ;
384
407
}
@@ -596,9 +619,29 @@ protected void _addMemberMethods(Class<?> cls, AnnotatedMethodMap methods,
596
619
if (cls == null ) { // just so caller need not check when passing super-class
597
620
return ;
598
621
}
599
-
622
+ Method [] classMethods ;
623
+ try {
624
+ classMethods = cls .getDeclaredMethods ();
625
+ }catch (final NoClassDefFoundError ex ){
626
+ // One of the methods had a class that was not found in the cls.getClassLoader.
627
+ // Maybe the developer was nice and has a different class loader for this context.
628
+ final ClassLoader loader = Thread .currentThread ().getContextClassLoader ();
629
+ if (loader == null ) {
630
+ // Nope... this is going to end poorly
631
+ throw ex ;
632
+ }
633
+ final Class <?> contextClass ;
634
+ try {
635
+ contextClass = loader .loadClass (cls .getName ());
636
+ }
637
+ catch (ClassNotFoundException e ) {
638
+ ex .addSuppressed (e );
639
+ throw ex ;
640
+ }
641
+ classMethods = contextClass .getDeclaredMethods (); // Cross fingers
642
+ }
600
643
// then methods from the class itself
601
- for (Method m : cls . getDeclaredMethods () ) {
644
+ for (Method m : classMethods ) {
602
645
if (!_isIncludableMemberMethod (m )) {
603
646
continue ;
604
647
}
0 commit comments