-
Bug
-
Resolution: Fixed
-
P3
-
1.4.0
-
beta2
-
generic
-
generic
-
Not verified
Interop resolution 3857
http://cgi.omg.org/issues/java2idl-rtf.html#Issue3857
says that in RMI-IIOP, a null referred to by an Object, Serializable, or Externalizable reference is encoded as an Any with the type code tk_abstract_interface, repository ID "IDL:omg.org/CORBA/AbstractBase:1.0", the name string "", and value of null abstract interface (encoded as a boolean discriminant of false followed by a long value of 0).
When a spec compliant ORB sends such a beast, our current AnyImpl gets an ArrayIndexOutOfBounds exception.
AnyImpl has an isStreamed array which is short two items -- tk_native and tk_abstract_interface.
This bug was found as part of the Connectathon effort for JavaOne.
IBM reported that they upgraded their ORB to fix this same problem by doing the following:
1.add the missing entries to the is_streamed[ ] array as already noted,
2.modify AnyImpl.extract_Value(), to accept a kind of _tk_abstract_interface,
3.add a case statement inTCUtility.marshalIn() to handle an abstract interface using write_abstract_interface(),
4.add a case statement in TCUtility.unmarshalIn() to handle an abstract interface using read_abstract_interface().
In addition, our ORB must do the proper ORB versioning to maintain backwards compatibility with older JDKs.
********************************************************************************
###@###.### 2001-11-06
Fix verified OK:
- using build: j2sdk-1_4_0-beta3-bin-b84-solsparc-20_oct_2001
- by inspecting code at:com/sun/corba/se/internal/corba/AnyImpl.java
com/sun/corba/se/internal/corba/TCUtility.java
com/sun/corba/se/internal/corba/TypeCodeImpl.java
com/sun/corba/se/internal/iiop/ShutdownUtilDelegate.java
********************************************************************************
http://cgi.omg.org/issues/java2idl-rtf.html#Issue3857
says that in RMI-IIOP, a null referred to by an Object, Serializable, or Externalizable reference is encoded as an Any with the type code tk_abstract_interface, repository ID "IDL:omg.org/CORBA/AbstractBase:1.0", the name string "", and value of null abstract interface (encoded as a boolean discriminant of false followed by a long value of 0).
When a spec compliant ORB sends such a beast, our current AnyImpl gets an ArrayIndexOutOfBounds exception.
AnyImpl has an isStreamed array which is short two items -- tk_native and tk_abstract_interface.
This bug was found as part of the Connectathon effort for JavaOne.
IBM reported that they upgraded their ORB to fix this same problem by doing the following:
1.add the missing entries to the is_streamed[ ] array as already noted,
2.modify AnyImpl.extract_Value(), to accept a kind of _tk_abstract_interface,
3.add a case statement inTCUtility.marshalIn() to handle an abstract interface using write_abstract_interface(),
4.add a case statement in TCUtility.unmarshalIn() to handle an abstract interface using read_abstract_interface().
In addition, our ORB must do the proper ORB versioning to maintain backwards compatibility with older JDKs.
********************************************************************************
###@###.### 2001-11-06
Fix verified OK:
- using build: j2sdk-1_4_0-beta3-bin-b84-solsparc-20_oct_2001
- by inspecting code at:com/sun/corba/se/internal/corba/AnyImpl.java
com/sun/corba/se/internal/corba/TCUtility.java
com/sun/corba/se/internal/corba/TypeCodeImpl.java
com/sun/corba/se/internal/iiop/ShutdownUtilDelegate.java
********************************************************************************