ProxyHandlerProxy and SerializerRegistry treat incorrectly an array of 
XmlSerializable
--------------------------------------------------------------------------------------

                 Key: MUSE-266
                 URL: https://issues.apache.org/jira/browse/MUSE-266
             Project: Muse
          Issue Type: Bug
          Components: Core Engine - Routing and Serialization
    Affects Versions: 2.2.0
         Environment: Java 5.0
            Reporter: Bogdan Solomon
            Assignee: Dan Jemiolo


I have an array of custom defined objects that implement the XmlSerializable 
interface. These objects are then sent via a proxy generated by TPTP from a 
client (who is also a Muse resource) to another resource. The invocation 
however results in an exception due to the non existence of a serializer for my 
custom type. I would have expected to have it serialized via the 
XmlSerializable interface.

The bug results from the way the SerializerRegistry tries to find the 
Serializer for a class. Looking at the code it looks for the class and it's 
parents + interfaces. However doing a small test showed me that Java returns 
for an array of my objects the following interfaces, and no parents:

class com.ibm.autonomic.util.Test
interface java.lang.Cloneable
interface java.io.Serializable

doing the same test for an object of my type results in the following:

interface org.apache.muse.util.xml.XmlSerializable
interface com.ibm.autonomic.util.EstimatedDataNamespace

So it will be impossible for the current implementation of the 
SerializerRegistry to find how to serialize any array type that should be 
serialized via a parent's or interface's serializer. The solution in my opinion 
would be to check if it is an array class, check if the type of that array is 
serializable and then return the ArraySerializer. This would also remove the 
necessity of adding a serializer for the array type and for the basic type.


In SerializerRegistry line 120 after 

if (type == null)
            throw new NullPointerException(_MESSAGES.get("NullClass"));

add 
if (type.isArray())
{
        //figure out if we have a serializer for the base type
        Serializer ser = searchClassHierarchy(type.getComponentType()); 

         
         if (ser != null)
         {
                  //the base type has a serializer, so generate an array 
serializer for the type and return it
                  //the type will be our array type and ser is the serializer 
for the base type
                  Serializer serArray = new ArraySerializer(type, ser);
                  return serArray;
         }
}

This would also result in the removal of lines 168, 169, 172 from the 
registrySerializer() method as they will no longer be necessary and they work 
only if the base array type has a serializer. I'll attach a fixed 
SerializerRegistry

-- 
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