java.lang.IllegalArgumentException when registering a callback

In a .NET-to-Java project, when code executes that registers a callback/listener with the Java side, you might see a java.lang.IllegalArgumentException. If this happens, it is because your [Callback] or [AsyncCallback] attribute names a listener interface that differs from the one that the Java-side code actually expects.

For example, if you have proxied the Java method:

public void registerListener(MyListenerInterface)

and have implemented .NET code like the following:

public class MyListenerClass : MyListenerInterface { … }

and then call:

javaClass.registerListener(new MyListenerClass());

the code will properly compile, but when it executes, an IllegalArgumentException will be thrown.

If this happens, the solution is to make sure that the [Callback] or [AsyncCallback] attribute specifies the precise listener class expected on the Java side.  In this case, changing the attribute to


will solve the problem.  Note that the attribute must contain the fully qualified name of the interface.