-
Bug
-
Resolution: Won't Fix
-
P3
-
None
-
1.4.2
-
x86
-
windows_2000
Description:
When one our licensee's J2EE container calls EJB of SUN's RI,
CORBA.MARSHAL exception will come to show up in jdk1.4.2_03
This will occur when the return value is java.util.Vector.
Although that licensee's container can communicate with SUN's RI
in jdk1.4.0 successfully, it will throw an error in 1.4.2.
Our licensee encounterd failed when passing some interop tests of CTS1.3.1
shown below.
interop\tx\session\stateful\bm\TxBM_GlobalSingle\Client_test1.jtr
interop\tx\session\stateful\bm\TxBM_GlobalSingle\Client_test2.jtr
interop\tx\session\stateful\cm\TxNS_Single\Client_test1.jtr
interop\tx\session\stateful\cm\TxN_Single\Client_test1.jtr
interop\tx\session\stateful\cm\TxRN_Single\Client_test1.jtr
interop\tx\session\stateful\cm\TxR_Single\Client_test1.jtr
interop\tx\session\stateful\cm\TxS_Single\Client_test1.jtr
interop\tx\webclient\jsp\URLClient_test1.jtr
interop\tx\webclient\jsp\URLClient_test2.jtr
Below is a considered cause and the trace excerpts from the attached GIOP trace.
The wire message from SUN's RI does not complies with the
CORBA Specification which causes the MARSHAL exception.
There are the chunk markers called "end tag" and "chunk size tag" in
MARSHALIZED data and the response message from SUN's RI is divided
into several GIOP messages.
Suppose that a chunk straddles 2 different divided GIOP messages.
In this case, the 2 contiguous "chunk size tag"markers seems to show up .
According to the CORBA specification, "chunk size tag" should be one
next to "end tag". Because that licensee's ORB handles the MARSHALIZED data
in the way based on CORBA spec., it can not handle chunk data correctly
by such 2 contiguous "chunk size tag"s.
Then the MARSHAL exception occurs on un-MARSHALing .
The line 22782 and 22822 are the boundary of two devided wire messages.
[end tag] [chunk size tag]
============================================================================
22782: 00 00 00 04 40 c0 00 00 ff ff ff fd 00 00 00 04 ................
The boundary of GIOP
22822: 47 49 4f 50 01 02 00 07 00 00 02 c8 00 00 02 90 GIOP...........?
22823: 00 00 00 1d 00 00 00 76 00 00 00 72 00 00 00 00 .......v...r....
============================================================================
Now [chunk size tag] shows up, it should be [value tag]("7f ff ff 0a",etc.)
In the line 22782, "ff ff ff fd" is an [end tag], followed by a [chunk size tag]
"00 00 00 04". So in the line 22823 [value tag]("7f ff ff 0a",etc.) should be where
[chunk size tag]("00 00 00 76") shows up. In fact, that [vaule tag] appears in the line 22831
which was not attached here. Why [chunk size tag]("00 00 00 76") shows up in the line 22823,
which does not comply with CORBA spcification.
(The line 22822 is GIOP header).
In J2SE 1.4.0, the mentioned above problem does not occur.
Run below in jdk140 and in jdk142.
rmic -idl java.util.Vector
you can see the two idl are different. It is "valuetype" in jdk1.4.0,
but in jdk1.4.2 it becomes "custom valuetype".
I attached the 2(jdk140 & jdk142) full GIOP trace.
xiaojun 2004-05-12
When one our licensee's J2EE container calls EJB of SUN's RI,
CORBA.MARSHAL exception will come to show up in jdk1.4.2_03
This will occur when the return value is java.util.Vector.
Although that licensee's container can communicate with SUN's RI
in jdk1.4.0 successfully, it will throw an error in 1.4.2.
Our licensee encounterd failed when passing some interop tests of CTS1.3.1
shown below.
interop\tx\session\stateful\bm\TxBM_GlobalSingle\Client_test1.jtr
interop\tx\session\stateful\bm\TxBM_GlobalSingle\Client_test2.jtr
interop\tx\session\stateful\cm\TxNS_Single\Client_test1.jtr
interop\tx\session\stateful\cm\TxN_Single\Client_test1.jtr
interop\tx\session\stateful\cm\TxRN_Single\Client_test1.jtr
interop\tx\session\stateful\cm\TxR_Single\Client_test1.jtr
interop\tx\session\stateful\cm\TxS_Single\Client_test1.jtr
interop\tx\webclient\jsp\URLClient_test1.jtr
interop\tx\webclient\jsp\URLClient_test2.jtr
Below is a considered cause and the trace excerpts from the attached GIOP trace.
The wire message from SUN's RI does not complies with the
CORBA Specification which causes the MARSHAL exception.
There are the chunk markers called "end tag" and "chunk size tag" in
MARSHALIZED data and the response message from SUN's RI is divided
into several GIOP messages.
Suppose that a chunk straddles 2 different divided GIOP messages.
In this case, the 2 contiguous "chunk size tag"markers seems to show up .
According to the CORBA specification, "chunk size tag" should be one
next to "end tag". Because that licensee's ORB handles the MARSHALIZED data
in the way based on CORBA spec., it can not handle chunk data correctly
by such 2 contiguous "chunk size tag"s.
Then the MARSHAL exception occurs on un-MARSHALing .
The line 22782 and 22822 are the boundary of two devided wire messages.
[end tag] [chunk size tag]
============================================================================
22782: 00 00 00 04 40 c0 00 00 ff ff ff fd 00 00 00 04 ................
The boundary of GIOP
22822: 47 49 4f 50 01 02 00 07 00 00 02 c8 00 00 02 90 GIOP...........?
22823: 00 00 00 1d 00 00 00 76 00 00 00 72 00 00 00 00 .......v...r....
============================================================================
Now [chunk size tag] shows up, it should be [value tag]("7f ff ff 0a",etc.)
In the line 22782, "ff ff ff fd" is an [end tag], followed by a [chunk size tag]
"00 00 00 04". So in the line 22823 [value tag]("7f ff ff 0a",etc.) should be where
[chunk size tag]("00 00 00 76") shows up. In fact, that [vaule tag] appears in the line 22831
which was not attached here. Why [chunk size tag]("00 00 00 76") shows up in the line 22823,
which does not comply with CORBA spcification.
(The line 22822 is GIOP header).
In J2SE 1.4.0, the mentioned above problem does not occur.
Run below in jdk140 and in jdk142.
rmic -idl java.util.Vector
you can see the two idl are different. It is "valuetype" in jdk1.4.0,
but in jdk1.4.2 it becomes "custom valuetype".
I attached the 2(jdk140 & jdk142) full GIOP trace.
xiaojun 2004-05-12