Deserializing objects on client side with unknown data members from server side 
causes exception, makes server code harder to maintain
--------------------------------------------------------------------------------------------------------------------------------------

         Key: AXIS-2285
         URL: http://issues.apache.org/jira/browse/AXIS-2285
     Project: Apache Axis
        Type: Bug
  Components: Serialization/Deserialization  
    Versions: 1.3    
 Environment: Windows XP
    Reporter: Geir Egil Hansen


Example: 
I make a class on the server side. The class contains some data members.
Like 
class MyClass{
   String str1;
}
Some clients are generated uses the WSDL file. 
In the next server version I need to add another datamember to the class:
class MyClass{
   String str1;
   String str2;
}
Then the Axis client based on the previous version throws an exception. The 
exception is thrown from the class BeanDeserializer at around line 250. And the 
code doing it is like this:
        if (propDesc == null) {
                throw new SAXException( Messages.getMessage("badElem00", 
javaType.getName(),   localName));
                return null;
        }
Throwing an exception here in the client makes it impossible to extend the 
functionality on the server side. I have tested .NET clients, other Java 
clients, Borland  C++ Builder and none of them throws any exception. And I 
think it is wrong to throw any here, because the client code is supposed to 
deserialize any datamembers it knwos about. It does need what it does not know 
anything about. It would be a different matter if an existing datameber was 
removed in the new version (like str1 was removed in the example). THEN an 
exception must be thrown.

I think this is a bug and should be fixed. Now we ask our customers  if they 
are to use Axis to generate the client, and if they are, we give them a new 
version of the BeanSerializer.java where the code is changed to
        if (propDesc == null) {
                        //@TODO: No such field. Throwing exception here makes 
code not backwards compatible.
                        log.warn("No such field in client code: " + 
javaType.getName() + "/" + localName);
//            throw new SAXException(
//                    Messages.getMessage("badElem00", javaType.getName(),
//                                         localName));
                        return null;
                }


-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to