axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Vilnis Termanis (JIRA)" <>
Subject [jira] [Commented] (AXIS2-3034) Axis2 Serialization problem with emptyset bitflag enums.
Date Fri, 10 Jun 2011 12:20:58 GMT


Vilnis Termanis commented on AXIS2-3034:

Unfortunately the "fix" breaks WSDL generation in that the fromValue() function is not compilable
in certain situations. For example, with the following type:

<xs:simpleType name="tSomeType">
    <xs:restriction base="xs:int">
      <xs:enumeration value="1">
      <xs:enumeration value="2">
          <xs:documentation>Something else</xs:documentation>

Corresponding fromValue function now contains:

public static TSomeType fromValue(int value)
                      throws java.lang.IllegalArgumentException {
                    TSomeType enumeration = (TSomeType)
                             _table_.get(value + "");

                    if ((enumeration == null) && !((value == null) || (value.equals(""))))
                        throw new java.lang.IllegalArgumentException();
                    return enumeration;

Since value is of type 'int', the updated if statement results in compilation failure ("int
cannot be dereferenced").

Tested with Axis2 1.6.0 wsdl2java.


> Axis2 Serialization problem with emptyset bitflag enums.
> --------------------------------------------------------
>                 Key: AXIS2-3034
>                 URL:
>             Project: Axis2
>          Issue Type: Bug
>          Components: codegen
>    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
> <s:element maxOccurs="1" minOccurs="1" name="eFlags" type="tns:EnumMWSSearchFlags"/>

This message is automatically generated by JIRA.
For more information on JIRA, see:

To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message