Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-5045814

Incompatibility of Vector CORBA communication between jdk140 and jdk142_03

XMLWordPrintable

    • 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

            mbankal Mala Bankal (Inactive)
            xiaojuzh Xiaojun Zhang (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: