[ 
https://issues.apache.org/jira/browse/AXIS2-3034?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Deepal Jayasinghe reassigned AXIS2-3034:
----------------------------------------

    Assignee: Amila Chinthaka Suriarachchi

> Axis2 Serialization problem with emptyset bitflag enums.
> --------------------------------------------------------
>
>                 Key: AXIS2-3034
>                 URL: https://issues.apache.org/jira/browse/AXIS2-3034
>             Project: Axis 2.0 (Axis2)
>          Issue Type: Bug
>    Affects Versions: 1.2
>            Reporter: David R. Kraus
>            Assignee: Amila Chinthaka Suriarachchi
>
> I created a bitflag enum, where one value is associated with each bit of the 
> enum, and multiple values/bits can be set for the value of the enum (see 
> dotnet generated WSDL below).  The DotNet generated WSDL was taken and used 
> to create Java serialization classes (wsdl2java).The problem is that Axis2 
> can't handle the zero length string that is passed representing the empty 
> set. A bitflag enum can have more than one value, because each possible enum 
> value is represented by a bit. The problem occurs when none of the values is 
> set, and a bitflag value of zero(0) is serialized as "" (zero length string).
> Enums are a tricky type since their representation as a numeric entity (bits) 
> making them a non-nullable type, although their value is transfered as a 
> string with multiple concatenated enum values.
> There are two classes generated by wsdl2java to handle the bitflag enum at 
> the server (eg. EnumMWSSearchFlags, EnumMWSSearchFlags_type0). 
> EnumMWSSearchFlags contains an array of EnumMWSearchFlags_type0, each element 
> of which can refer to a bit value.
>  
> Both dotnet and java clients serialize the empty set as a zero length string. 
> This zero length string is parsed, at the server, looking for individual enum 
> values. Of course, none are found, and when the zero length string is used in 
> a table lookup for valid members of the enum (in EnumMWSSearchFlags_type0) an 
> IllegalArgumentException is generated. I have been able to get this to work 
> by commenting out the check for valid enum members being passed in (server 
> side only), but obviously this isn't the best way to do this (see specific 
> commented out code below).
> I have been able to workaround this on the server side by commenting out an 
> exception (described in email thread below), BUT the real problem now is that 
> this only handles the case where the enum is being passed into the service 
> from the client. Patching the client side is not an option (when empty enum 
> is passed to the client from the service). We do not have a workaround for 
> this problem (client side can't be patched) and are near the end of our 
> development cycle, so we are very concerned!
> If Axis2 serialization code interprets the empty bitflag as a zero length 
> string when it serializes it, then the receiving code should then be able to 
> handle this zero length string. Right now that is not happening correctly. I 
> think this is a bug.
>  
> Thanks, Dave Kraus
> Altered server side code - see comment:
>                 public static EnumMWSSearchFlags_type0 
> fromValue(java.lang.String value)
>                       throws java.lang.IllegalArgumentException {
>                     EnumMWSSearchFlags_type0 enumeration = 
> (EnumMWSSearchFlags_type0)
>                                _table_.get(value);
>                            
>                     //drk: Comment out so that bitflag enum can accept an 
> emptyset enum
>                    /*if (enumeration==null) throw new 
> java.lang.IllegalArgumentException();*/
>                     return enumeration;
>                 }
> WSDL representation of a bitflag enum:
>       <s:simpleType name="EnumMWSSearchFlags">
>         <s:list>
>           <s:simpleType>
>             <s:restriction base="s:string">
>               <s:enumeration value="MWSAbbreviationWildCard"/>
>               <s:enumeration value="MWSDescriptionWildCard"/>
>               <s:enumeration value="MWSFolderBrowseStyle"/>
>               <s:enumeration value="MWSModificationTime"/>
>               <s:enumeration value="MWSNameWildCard"/>
>               <s:enumeration value="MWSRootRecursive"/>
>               <s:enumeration value="MWSUsedByOneOf"/>
>               <s:enumeration value="MWSUsedByRecursive"/>
>               <s:enumeration value="MWSUsesOneOf"/>
>               <s:enumeration value="MWSUsesRecursive"/>
>               <s:enumeration value="MWSVisibleOnly"/>
>               <s:enumeration value="MWSBrowseAsync"/>
>               <s:enumeration value="MWSOwnedByCurrentUser"/>
>             </s:restriction>
>           </s:simpleType>
>         </s:list>
>       </s:simpleType>
>  
> WSDL representation of usage of the bitflag enum as a parameter showing 
> minoccurs=1 because it's a non-nullable type. So it really doesn't make sense 
> to pass in a null instead of the emptyset.
> <s:element maxOccurs="1" minOccurs="1" name="eFlags" 
> type="tns:EnumMWSSearchFlags"/>

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to