incubator-yoko-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Vescovi, Matteo" <matteo.vesc...@iona.com>
Subject Re: IdlToWsdl corba binding type tests
Date Tue, 13 Feb 2007 10:31:35 GMT
Hi,
I'm working on the unsigned short idltowsdl corba binding type test.

When sending an unsigned short greater than 2^15, the value is 
incorrectly marshalled to a negative value. I tracked down the problem 
to an implicit conversion between Integer and short types occuring 
between the CorbaObjectWriter.writeUShort(Integer) invocation and 
OutputStream.write_ushort(short) (see stack trace below).

Thread [main] (Suspended)   
    OutputStream.write_short(short) line: 894   
    OutputStream.write_ushort(short) line: 900   
    CorbaObjectWriter.writeUShort(Integer) line: 155   
    CorbaObjectWriter.write(CorbaObjectHandler) line: 73   
    CorbaStreamable._write(OutputStream) line: 57   
    Any.write_value(OutputStream) line: 482   
    Request.marshal() line: 96   
    Request.invoke() line: 291   
    CorbaConduit.buildRequest(CorbaMessage, OperationType) line: 187   
    CorbaConduit.close(Message) line: 128   
    MessageSenderInterceptor.handleMessage(Message) line: 58   
    PhaseInterceptorChain.doIntercept(Message) line: 167   
    ClientImpl.invoke(BindingOperationInfo, Object[], 
Map<String,Object>) line: 152   
    JaxWsClientProxy(ClientProxy).invokeSync(Method, 
BindingOperationInfo, Object[], Map<String,Object>) line: 73   
    JaxWsClientProxy.invoke(Object, Method, Object[]) line: 116   
    $Proxy37.testUnsignedShort(int, Holder, Holder) line: not available   
    
IdlToWsdlTypeTest(AbstractIdlToWsdlTypeTestClient).testUnsignedShort() 
line: 184   
    NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not 
available [native method]   
    NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39   
    DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25   
    Method.invoke(Object, Object...) line: 585   
    IdlToWsdlTypeTest(TestCase).runTest() line: 164   
    IdlToWsdlTypeTest(TestCase).runBare() line: 130   
    TestResult$1.protect() line: 106   
    TestResult.runProtected(Test, Protectable) line: 124   
    TestResult.run(TestCase) line: 109   
    IdlToWsdlTypeTest(TestCase).run(TestResult) line: 120   
    TestSuite.runTest(Test, TestResult) line: 230   
    TestSuite.run(TestResult) line: 225   
    TestRunner.doRun(Test, boolean) line: 121   
    TestRunner.doRun(Test) line: 114   
    TestRunner.run(Test) line: 77   
    TestRunner.run(Class) line: 62   
    IdlToWsdlTypeTest.main(String[]) line: 59   

According to the CORBA 2.6 spec, unsigned short's range is 0...2^16 - 1

I am going to fix this, and then post a patch for review before I commit 
the changes.

Cheers,
- Matteo


Darren Middleman wrote:
> Hello Matteo,
>
> For most of the basic types, this information should be in the third 
> chapter
> of the CORBA spec, under IDL Syntax and Semantics.  The information is
> a bit spread out over the chapter but it does give a good idea of the 
> valid
> ranges for each of the types.
>
> Cheers,
> Darren
>
>
>
> On 2/12/07, Vescovi, Matteo <matteo.vescovi@iona.com> wrote:
>>
>> That's great, thanks Darren.
>>
>> I debugged into that part of code and saw the char being assigned an out
>> of range value, but I wasn't sure what the appropriate encoding should
>> have been.
>>
>> For future reference, where would I find that kind of information?
>> Would it be in the CORBA spec? The CDR encoding maybe?
>>
>> Cheers,
>> - Matteo
>>
>>
>> Darren Middleman wrote:
>> > Hello Matteo,
>> >
>> > I think I've tracked down the cause of the problem.
>> >
>> > The reason this was happening was due to the way the conversion 
>> from the
>> > Byte object to the Character object was being made.  Using a negative
>> > byte
>> > value to create a new character resulted in the value of the character
>> > wrapping
>> > within its range and causing a large character value.  (i.e. byte
>> > value of
>> > -128
>> > resulted in a character with value 65408).  When this value was passed
>> to
>> > the
>> > ORB, the stream checked to ensure that the value was not greater than
>> 255
>> > (the
>> > OMG range for a character is 0 to 255) and since it was, threw a
>> > DATA_CONVERSION exception.
>> >
>> > I'm going to add something to the PrimitiveHandler so that the correct
>> > conversion
>> > from a byte value to a character value is performed.  This should
>> > solve the
>> > issues
>> > you are seeing with the failing character test.
>> >
>> > Cheers,
>> > Darren
>> >
>> >
>> > On 2/12/07, Vescovi, Matteo <matteo.vescovi@iona.com> wrote:
>> >>
>> >> Hi,
>> >> I am trying to fix some of the (currently disabled) idltowsdl corba
>> >> binding type tests.
>> >>
>> >> The tests involve invoking an operation with the following corba
>> >> binding:
>> >>     <wsdl:operation name="testChar">
>> >>       <corba:operation name="testChar">
>> >>         <corba:param mode="in" name="inChar" idltype="corba:char" />
>> >>         <corba:param mode="inout" name="inoutChar"
>> >> idltype="corba:char" />
>> >>         <corba:param mode="out" name="outChar" 
>> idltype="corba:char" />
>> >>         <corba:return name="return" idltype="corba:char" />
>> >>       </corba:operation>
>> >>
>> >> In the client process, during the marshalling of the request, a
>> >> CORBA.DATA_CONVERSION exception is thrown when we attempt to write 
>> out
>> >> the character.
>> >>
>> >> I think the problem lies in the fact that the type mapping for a char
>> is
>> >> corba:char <-> xs:byte <-> java byte (or Byte).
>> >> Class org.apache.yoko.bindings.corba.CorbaObjectWriter casts the 
>> object
>> >> to be marshalled to a Character in its writeChar method.
>> >> Should this be cast to a Byte instead? Or should the Byte be
>> >> appropriately converted to a Character before being written out?
>> >>
>> >> I am not sure what the right approach to fix it is.
>> >> Perhaps someone with a better understanding of the runtime can 
>> help me
>> >> here?
>> >>
>> >> Any help or pointers to relevant resources will be appreciated.
>> >>
>> >> To reproduce this failure, enable the test by commenting out the
>> >> testChar method in
>> >>
>> >>
>> bindings/src/test/java/org/apache/yoko/bindings/corba/IdlToWsdlTypeTest.java 
>>
>> >>
>> >>
>> >>
>> >> Cheers,
>> >> - Matteo
>> >>
>> >>
>> >
>>
>>
>


Mime
View raw message