RP/TUX 8.1 - Tuxedo CORBA infrastructure with CORBA DII handles the output argument incorrectly with the user defined structures.
(Doc ID 778083.1)
Last updated on JANUARY 19, 2018
Applies to:Oracle Tuxedo / Tuxedo / 8.1
Information in this document applies to any platform
DESCRIPTION: Customer has the following server method: ::CORBA::Long FXOBicData_i::getBicData (const FXOQData & query, ::FXOQData_out data) FXOQData is a dynamic class object which can have binary data. From a client, when invoke this method the input arg1 is passed successfully from client to server. However, cannot restore the arg2 as output from client. From the dii_clnt.cpp around 134 line, it does not work. cout << "XXXX: newqdata::data: " << newqdata->OBB__GetData() << endl If change to the following, it can get the data from server: cout << "XXXX: newqdata::*data: " << *(char **)newqdata->OBB__GetData() << endl; It indicates that the DII handles the output argument incorrectly with the user defined structures. From the above statement, FXOQData._data (newqdata->OBB__GetData()) became double pointer, after invoke(). But, "_data" in the class is actually defined as pointer to octet, not double pointer: ::CORBA::Octet *_data; For a text string terminated by '\0', may consider "*(char **)newqdata->OBB__GetData()" as a workaround. However, it doesn't work for the real binary/unformatted data. Take the following test output as an example, XXXX: oqdata::length: 9 XXXX: oqdata::address: 1197176 XXXX: oqdata::data: Output String XYZ123456. The data length is wrong and the binary data cannot be extracted. It means that the whole structure for the output argument is not updated correctly. CONFIGURATION: Tuxedo 8.1 RP 130 Sun Solaris 8 (OS 5.8) C++ Compiler Sun Workshop 6 Update 2 Tuxedo CORBA infrastructure with CORBA objects/interfaces
To view full details, sign in with your My Oracle Support account.
Don't have a My Oracle Support account? Click to get started!
In this Document