Hi,
I ran into an interoperability problem between Fnorb and Sun Java 1.5 and upwards.
Some debugging showed that as of Java 1.5, the following bug is fixed:
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4775833
From this bug report:
<<
When a GIOP 1.2 Request header is built it adds padding
bytes to the output stream to align the Request Body on an 8 byte boundary as per "CORBA formal 00-11-07 15.4.2.2" which states in the first paragraph that:
"GIOP 1.2 body must be aligned on an 8 octet boundary."
This is incorrect when there is no Request Body (ie: for
methods with no parameters). "CORBA formal 00-11-07 section 15.4.2.1", last paragraph, states:
"There is no padding after the request header when an
unfragmented request message body is empty."
This also applies to Response headers/bodies.
>>
Fnorb happens to contain this same bug, and throws an exception when a correct message is offered.
Workaround to make it work for me are:
in GIOPClient.py, extra tests for the padding:
def __process_reply(self, request, (reply_header, cursor)):
""" Process a GIOP reply. """
# Align on the next 8-byte boundary for GIOP 1.2
if self.__giop_version.minor == 2 :
if len(request.outputs()) > 0 or reply_header.reply_status == GIOP.SYSTEM_EXCEPTION or reply_header.reply_status == GIOP.USER_EXCEPTION:
....
in GIOPServer.py, also see if more is coming:
def process_giop_message(self, message):
""" Process a GIOP message.
.....
# Align on the next 8-byte boundary for GIOP 1.2
if giop_header.GIOP_version.minor == 2 and giop_header.message_size + 12> cursor.offset() + 1 :
.....
regards,
Lieven