VetorDeserializer cannot deserialize Beans inside of a Vector
-------------------------------------------------------------
Key: AXIS-2508
URL: http://issues.apache.org/jira/browse/AXIS-2508
Project: Apache Axis
Type: Bug
Components: Serialization/Deserialization
Versions: 1.4
Environment: Win XP SP2, Tomcat 5.5.15, Axis1.4
Reporter: Steffen Heinzl
The VectorDeserializer is only able to deserialize primitive Types and Strings
(and perhaps a few other types). The VectorSerializer should add the namespcae
of the object
to be serialized to the SOAP message.
The following patch provides bean support for VectorSerializer and
-Deserializer. Instead of <item xmlns="">, the namespace of the object (if
registered as typeMapping) to be serialized is used.
Index: VectorDeserializer.java
===================================================================
RCS file:
/Volumes/data/cvs/heinzl/PatchTest/src/org/apache/axis/encoding/ser/VectorDeserializer.java,v
retrieving revision 1.1
diff -u -r1.1 VectorDeserializer.java
--- VectorDeserializer.java 31 May 2006 09:23:33 -0000 1.1
+++ VectorDeserializer.java 31 May 2006 09:38:27 -0000
@@ -110,11 +110,18 @@
QName itemType = context.getTypeFromAttributes(namespace,
localName,
attributes);
+
// Get the deserializer
Deserializer dSer = null;
if (itemType != null) {
dSer = context.getDeserializerForType(itemType);
}
+
+ if (itemType == null && namespace != null && localName != null)
+ {
+ dSer = context.getDeserializerForType(new QName(namespace,
localName));
+ }
+
if (dSer == null) {
dSer = new DeserializerImpl();
}
Index: VectorSerializer.java
===================================================================
RCS file:
/Volumes/data/cvs/heinzl/PatchTest/src/org/apache/axis/encoding/ser/VectorSerializer.java,v
retrieving revision 1.1
diff -u -r1.1 VectorSerializer.java
--- VectorSerializer.java 31 May 2006 09:23:33 -0000 1.1
+++ VectorSerializer.java 31 May 2006 09:38:27 -0000
@@ -32,6 +32,8 @@
import java.util.Iterator;
import java.util.Vector;
+import org.apache.axis.encoding.TypeMapping;
+
/**
* A <code>VectorSerializer</code> is be used to serialize and
* deserialize Vectors using the <code>SOAP-ENC</code>
@@ -71,12 +73,21 @@
if(isRecursive(new IdentityHashMap(), vector)){
throw new IOException(Messages.getMessage("badVector00"));
}
-
+
+ TypeMapping tm = context.getTypeMapping();
context.startElement(name, attributes);
for (Iterator i = vector.iterator(); i.hasNext(); )
{
Object item = i.next();
- context.serialize(Constants.QNAME_LITERAL_ITEM, null, item);
+ QName elemQName = tm.getTypeQName(item.getClass());
+ if (elemQName != null)
+ {
+ context.serialize(elemQName, null, item);
+ }
+ else
+ {
+ context.serialize(Constants.QNAME_LITERAL_ITEM, null, item);
+ }
}
context.endElement();
}
--
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
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]