Remember: RMI-IIOP is RMI tunneling over IIOP. The CORBA standard supports IIOP; it does NOT support RMI. If you use RMI-IIOP then the CORBA system will resceive the message (because its coming over an IIOP connection) but will have no idea what you're saying because it doesn't understand RMI. The only way you can communicate to CORBA in this case is to use CORBA.
Sadly Whizlabs has a tendency to confuse people :-)
"Previously Java programmers had to choose between RMI and CORBA/IIOP (Java IDL) for distributed programming solutions. Now, by adhering to a few restrictions, RMI server objects can use the IIOP protocol and communicate with CORBA client objects written in any language. This solution is known as RMI-IIOP. RMI-IIOP combines RMI-style ease of use with CORBA cross-language interoperability. "
This is taken from Sun and it clearly says --connecting to Corba Client Objects.
The restrictions are
1. Make sure all constant definitions in remote interfaces are of primitive types or String and evaluated at compile time.
2. Don't use Java names that conflict with IDL mangled names generated by the Java to IDL mapping rules. See section 28.3.2 of the Java Language to IDL Mapping specification for the Java to IDL name mapping rules.
3. Don't inherit the same method name into a remote interface more than once from different base remote interfaces.
4. Be careful when using names that differ only in case. The use of a type name and a variable of that type whose name differs from the type name only in case is supported. Most other combinations of names that differ only in case are not supported.
5. Don't depend on runtime sharing of object references to be preserved exactly when transmitting object references across IIOP. Runtime sharing of other objects is preserved correctly.
6. Don't use the following features of RMI: RMISocketFactory UnicastRemoteObject Unreferenced The Distributed Garbage Collection (DGC) interfaces
This leads me to believe that I should go for D and not B.