snichol 2002/08/28 20:33:44 Modified: java/docs changes.html java/src/org/apache/soap/encoding SOAPMappingRegistry.java java/src/org/apache/soap/encoding/soapenc MapSerializer.java Added: java/samples/collection CollectionClient.java CollectionService.java DeploymentDescriptor.xml README testit.cmd testit.sh java/src/org/apache/soap/encoding/soapenc CollectionSerializer.java Log: Add serialization of collection/map interfaces and concrete classes (besides Vector and Hashtable). Revision Changes Path 1.41 +1 -0 xml-soap/java/docs/changes.html Index: changes.html =================================================================== RCS file: /home/cvs/xml-soap/java/docs/changes.html,v retrieving revision 1.40 retrieving revision 1.41 diff -u -r1.40 -r1.41 --- changes.html 28 Aug 2002 18:53:40 -0000 1.40 +++ changes.html 29 Aug 2002 03:33:43 -0000 1.41 @@ -64,6 +64,7 @@ <li>Fix handling of missing Content-Type header.</li> <li>Fix EJB and CORBA providers to check deployment descriptor to determine whether method is exposed.</li> + <li>Add serialization of collection/map interfaces and concrete classes.</li> </ul> </li> </ul> 1.1 xml-soap/java/samples/collection/CollectionClient.java Index: CollectionClient.java =================================================================== /* * The Apache Software License, Version 1.1 * * * Copyright (c) 2000 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "SOAP" and "Apache Software Foundation" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * nor may "Apache" appear in their name, without prior written * permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation and was * originally based on software copyright (c) 2000, International * Business Machines, Inc., http://www.apache.org. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. */ package samples.collection; import java.io.*; import java.util.*; import java.net.*; import org.w3c.dom.*; import org.apache.soap.util.xml.*; import org.apache.soap.*; import org.apache.soap.encoding.*; import org.apache.soap.encoding.soapenc.*; import org.apache.soap.rpc.*; /** * See \samples\collection\readme for info. * * @author Scott Nichol ([EMAIL PROTECTED]) */ public class CollectionClient { private static String getType(URL endpointURL, Call call) { Response resp; try { resp = call.invoke(endpointURL, ""); } catch (SOAPException e) { return "Caught SOAPException (" + e.getFaultCode() + "): " + e.getMessage(); } // Check the response. if (!resp.generatedFault()) { Parameter ret = resp.getReturnValue(); return (String) ret.getValue(); } else { Fault fault = resp.getFault(); return "Generated fault: " + fault; } } private static void makeCall(URL endpointURL, Call call, Class type, Object value) { Vector params = new Vector(); params.addElement(new Parameter("collection", type, value, null)); call.setParams(params); System.out.println(type.getName() + " returns " + getType(endpointURL, call)); } public static void main(String[] args) throws Exception { if (args.length != 1 && (args.length != 2 || !args[0].startsWith("-"))) { System.err.println("Usage:"); System.err.println(" java " + CollectionClient.class.getName() + " [-encodingStyleURI] SOAP-router-URL"); System.exit (1); } // Process the arguments. int offset = 2 - args.length; String encodingStyleURI = args.length == 2 ? args[0].substring(1) : Constants.NS_URI_SOAP_ENC; URL url = new URL(args[1 - offset]); // Build the call. Call call = new Call(); call.setTargetObjectURI("urn:CollectionService"); call.setMethodName("getType"); call.setEncodingStyleURI(encodingStyleURI); // Build a Stack to serialize in various ways. Stack param = new Stack(); param.addElement("Mercury"); param.addElement("Venus"); param.addElement("Earth"); param.addElement("Mars"); param.addElement("Jupiter"); param.addElement("Saturn"); param.addElement("Uranus"); param.addElement("Neptune"); param.addElement("Pluto"); makeCall(url, call, Collection.class, param); makeCall(url, call, List.class, param); makeCall(url, call, Vector.class, param); makeCall(url, call, Stack.class, param); // Build an ArrayList to serialize in various ways. ArrayList param1 = new ArrayList(param); makeCall(url, call, ArrayList.class, param1); // Build a TreeSet to serialize in various ways. TreeSet param2 = new TreeSet(param); makeCall(url, call, Set.class, param2); makeCall(url, call, SortedSet.class, param2); makeCall(url, call, TreeSet.class, param2); // Build an HashSet to serialize in various ways. HashSet param3 = new HashSet(param); makeCall(url, call, HashSet.class, param3); // Build a LinkedList to serialize in various ways. LinkedList param4 = new LinkedList(param); makeCall(url, call, LinkedList.class, param4); // Build a Hashtable to serialize in various ways. Hashtable param5 = new Hashtable(); param5.put("Mercury", new Integer(1)); param5.put("Venus", new Integer(2)); param5.put("Earth", new Integer(3)); param5.put("Mars", new Integer(4)); param5.put("Jupiter", new Integer(5)); param5.put("Saturn", new Integer(6)); param5.put("Uranus", new Integer(7)); param5.put("Neptune", new Integer(8)); param5.put("Pluto", new Integer(9)); makeCall(url, call, Map.class, param5); makeCall(url, call, Dictionary.class, param5); makeCall(url, call, Hashtable.class, param5); // Build a HashMap to serialize in various ways. HashMap param6 = new HashMap(param5); makeCall(url, call, HashMap.class, param6); // Build a WeakHashMap to serialize in various ways. WeakHashMap param7 = new WeakHashMap(param5); makeCall(url, call, WeakHashMap.class, param7); // Build a TreeMap to serialize in various ways. TreeMap param8 = new TreeMap(param5); makeCall(url, call, SortedMap.class, param8); makeCall(url, call, TreeMap.class, param8); } } 1.1 xml-soap/java/samples/collection/CollectionService.java Index: CollectionService.java =================================================================== /* * The Apache Software License, Version 1.1 * * * Copyright (c) 2000 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "SOAP" and "Apache Software Foundation" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * nor may "Apache" appear in their name, without prior written * permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation and was * originally based on software copyright (c) 2000, International * Business Machines, Inc., http://www.apache.org. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. */ package samples.collection; import java.util.*; /** * @author Scott Nichol ([EMAIL PROTECTED]) */ public class CollectionService { public String getType(Collection c) { return "Collection"; } public String getType(List l) { return "List"; } public String getType(Map m) { return "Map"; } public String getType(Set s) { return "Set"; } public String getType(SortedMap m) { return "SortedMap"; } public String getType(SortedSet s) { return "SortedSet"; } public String getType(ArrayList l) { return "ArrayList"; } public String getType(Dictionary d) { return "Dictionary"; } public String getType(HashMap m) { return "HashMap"; } public String getType(HashSet s) { return "HashSet"; } public String getType(Hashtable t) { return "Hashtable"; } public String getType(LinkedList l) { return "LinkedList"; } public String getType(Stack s) { return "Stack"; } public String getType(TreeMap m) { return "TreeMap"; } public String getType(TreeSet s) { return "TreeSet"; } public String getType(Vector v) { return "Vector"; } public String getType(WeakHashMap m) { return "WeakHashMap"; } } 1.1 xml-soap/java/samples/collection/DeploymentDescriptor.xml Index: DeploymentDescriptor.xml =================================================================== <isd:service xmlns:isd="http://xml.apache.org/xml-soap/deployment" id="urn:CollectionService"> <isd:provider type="java" scope="Application" methods="getType"> <isd:java class="samples.collection.CollectionService" static="false"/> <isd:option key="SessionRequired" value="false"/> </isd:provider> <isd:faultListener>org.apache.soap.server.DOMFaultListener</isd:faultListener> </isd:service> 1.1 xml-soap/java/samples/collection/README Index: README =================================================================== Service: ------- To install this service on an Apache-SOAP listener, you need to make the samples.collection package available on the Apache-SOAP listener's classpath. Then deploy this service by filling in the deployment template using the info in the deployment descriptor in this directory or by using the service manager client: java org.apache.soap.server.ServiceManagerClient routerURL deploy dd.xml where routerURL is the URL of the SOAP RPC router and dd.xml is the name of the deployment descriptor file. For example: java org.apache.soap.server.ServiceManagerClient \ http://localhost:8080/soap/servlet/rpcrouter deploy DeploymentDescriptor.xml Client: ------ There is 1 sample clients: java samples.collection.CollectionClient Run this with no args to see the usage. Additional Client Classpath Requirements: ---------------------------------------- ../.. Explanation: ----------- This is a simple service that tests the serialization of collections, both concrete classes and interfaces. Sample Usage: ------------ java samples.collection.CollectionClient \ http://localhost:2020/soap/servlet/rpcrouter 1.1 xml-soap/java/samples/collection/testit.cmd Index: testit.cmd =================================================================== @echo off echo This test assumes a server URL of http://localhost:8080/soap/servlet/rpcrouter echo Deploying the collection service... java org.apache.soap.server.ServiceManagerClient http://localhost:8080/soap/servlet/rpcrouter deploy DeploymentDescriptor.xml echo . echo Verify that it's there java org.apache.soap.server.ServiceManagerClient http://localhost:8080/soap/servlet/rpcrouter list echo . echo Run the client java samples.collection.CollectionClient http://localhost:8080/soap/servlet/rpcrouter echo . echo Undeploy it now java org.apache.soap.server.ServiceManagerClient http://localhost:8080/soap/servlet/rpcrouter undeploy urn:CollectionService echo . echo Verify that it's gone java org.apache.soap.server.ServiceManagerClient http://localhost:8080/soap/servlet/rpcrouter list 1.1 xml-soap/java/samples/collection/testit.sh Index: testit.sh =================================================================== echo This test assumes a server URL of http://localhost:8080/soap/servlet/rpcrouter echo Deploying the collection service... java org.apache.soap.server.ServiceManagerClient http://localhost:8080/soap/servlet/rpcrouter deploy DeploymentDescriptor.xml echo echo Verify that it\'s there java org.apache.soap.server.ServiceManagerClient http://localhost:8080/soap/servlet/rpcrouter list echo echo Run the client java samples.collection.CollectionClient http://localhost:8080/soap/servlet/rpcrouter echo echo Undeploy it now java org.apache.soap.server.ServiceManagerClient http://localhost:8080/soap/servlet/rpcrouter undeploy urn:CollectionService echo echo Verify that it\'s gone java org.apache.soap.server.ServiceManagerClient http://localhost:8080/soap/servlet/rpcrouter list 1.29 +78 -9 xml-soap/java/src/org/apache/soap/encoding/SOAPMappingRegistry.java Index: SOAPMappingRegistry.java =================================================================== RCS file: /home/cvs/xml-soap/java/src/org/apache/soap/encoding/SOAPMappingRegistry.java,v retrieving revision 1.28 retrieving revision 1.29 diff -u -r1.28 -r1.29 --- SOAPMappingRegistry.java 11 Apr 2002 23:22:04 -0000 1.28 +++ SOAPMappingRegistry.java 29 Aug 2002 03:33:44 -0000 1.29 @@ -286,15 +286,22 @@ throws IllegalArgumentException, IOException { nsStack.pushScope(); - SoapEncUtils.generateStructureHeader(inScopeEncStyle, - javaType, - context, - sink, - nsStack, - xjmr); - - sink.write(src + "</" + context + '>'); + if (src == null) + { + SoapEncUtils.generateNullStructure(inScopeEncStyle, javaType, context, + sink, nsStack, xjmr); + } + else + { + SoapEncUtils.generateStructureHeader(inScopeEncStyle, + javaType, + context, + sink, + nsStack, + xjmr); + sink.write(src + "</" + context + '>'); + } nsStack.popScope(); } }; @@ -519,15 +526,77 @@ */ mapTypes(soapEncURI, new QName(Constants.NS_URI_XML_SOAP, "Vector"), Vector.class, vectorSer, vectorSer); + // Note: the element type 'Map' is maintained for backward compatibility mapTypes(soapEncURI, new QName(Constants.NS_URI_XML_SOAP, "Map"), Hashtable.class, hashtableSer, hashtableSer); try { Class mapClass = Class.forName("java.util.Map"); MapSerializer mapSer = new MapSerializer(); + mapTypes(soapEncURI, new QName(Constants.NS_URI_XML_SOAP, "MapInterface"), + mapClass, mapSer, mapSer); + + mapClass = Class.forName("java.util.SortedMap"); + mapTypes(soapEncURI, new QName(Constants.NS_URI_XML_SOAP, "SortedMap"), + mapClass, mapSer, mapSer); + + mapClass = Class.forName("java.util.Dictionary"); + mapTypes(soapEncURI, new QName(Constants.NS_URI_XML_SOAP, "Dictionary"), + mapClass, mapSer, mapSer); + + mapClass = Class.forName("java.util.HashMap"); + mapTypes(soapEncURI, new QName(Constants.NS_URI_XML_SOAP, "HashMap"), + mapClass, mapSer, mapSer); + + mapClass = Class.forName("java.util.TreeMap"); + mapTypes(soapEncURI, new QName(Constants.NS_URI_XML_SOAP, "TreeMap"), + mapClass, mapSer, mapSer); - mapTypes(soapEncURI, new QName(Constants.NS_URI_XML_SOAP, "Map"), + mapClass = Class.forName("java.util.WeakHashMap"); + mapTypes(soapEncURI, new QName(Constants.NS_URI_XML_SOAP, "WeakHashMap"), mapClass, mapSer, mapSer); + } catch (ClassNotFoundException cnfe) { + } catch (NoClassDefFoundError ncdfe) { + // If the class can't be loaded, continue without it... + } + + try { + Class collectionClass = Class.forName("java.util.Collection"); + CollectionSerializer collectionSer = new CollectionSerializer(); + mapTypes(soapEncURI, new QName(Constants.NS_URI_XML_SOAP, "Collection"), + collectionClass, collectionSer, collectionSer); + + collectionClass = Class.forName("java.util.List"); + mapTypes(soapEncURI, new QName(Constants.NS_URI_XML_SOAP, "List"), + collectionClass, collectionSer, collectionSer); + + collectionClass = Class.forName("java.util.Set"); + mapTypes(soapEncURI, new QName(Constants.NS_URI_XML_SOAP, "Set"), + collectionClass, collectionSer, collectionSer); + + collectionClass = Class.forName("java.util.SortedSet"); + mapTypes(soapEncURI, new QName(Constants.NS_URI_XML_SOAP, "SortedSet"), + collectionClass, collectionSer, collectionSer); + + collectionClass = Class.forName("java.util.ArrayList"); + mapTypes(soapEncURI, new QName(Constants.NS_URI_XML_SOAP, "ArrayList"), + collectionClass, collectionSer, collectionSer); + + collectionClass = Class.forName("java.util.LinkedList"); + mapTypes(soapEncURI, new QName(Constants.NS_URI_XML_SOAP, "LinkedList"), + collectionClass, collectionSer, collectionSer); + + collectionClass = Class.forName("java.util.HashSet"); + mapTypes(soapEncURI, new QName(Constants.NS_URI_XML_SOAP, "HashSet"), + collectionClass, collectionSer, collectionSer); + + collectionClass = Class.forName("java.util.TreeSet"); + mapTypes(soapEncURI, new QName(Constants.NS_URI_XML_SOAP, "TreeSet"), + collectionClass, collectionSer, collectionSer); + + collectionClass = Class.forName("java.util.Stack"); + mapTypes(soapEncURI, new QName(Constants.NS_URI_XML_SOAP, "Stack"), + collectionClass, collectionSer, collectionSer); } catch (ClassNotFoundException cnfe) { } catch (NoClassDefFoundError ncdfe) { // If the class can't be loaded, continue without it... 1.10 +16 -2 xml-soap/java/src/org/apache/soap/encoding/soapenc/MapSerializer.java Index: MapSerializer.java =================================================================== RCS file: /home/cvs/xml-soap/java/src/org/apache/soap/encoding/soapenc/MapSerializer.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- MapSerializer.java 18 May 2001 14:31:14 -0000 1.9 +++ MapSerializer.java 29 Aug 2002 03:33:44 -0000 1.10 @@ -109,7 +109,7 @@ } hashtableSer.marshall(inScopeEncStyle, - Hashtable.class, + javaType, hashtable, context, sink, @@ -125,10 +125,24 @@ SOAPContext ctx) throws IllegalArgumentException { - return hashtableSer.unmarshall(inScopeEncStyle, + Bean bean = hashtableSer.unmarshall(inScopeEncStyle, elementType, src, xjmr, ctx); + // Create a new bean based on the de-serialized hashtable + // and elementType + Class javaType = xjmr.queryJavaType(elementType, inScopeEncStyle); + if (javaType != null) { + bean.type = javaType; + if (javaType.equals(SortedMap.class) || javaType.equals(TreeMap.class)) { + bean.value = new TreeMap((Hashtable) bean.value); + } else if (javaType.equals(HashMap.class)) { + bean.value = new HashMap((Hashtable) bean.value); + } else if (javaType.equals(WeakHashMap.class)) { + bean.value = new WeakHashMap((Hashtable) bean.value); + } + } + return bean; } } 1.1 xml-soap/java/src/org/apache/soap/encoding/soapenc/CollectionSerializer.java Index: CollectionSerializer.java =================================================================== /* * The Apache Software License, Version 1.1 * * * Copyright (c) 2000 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "SOAP" and "Apache Software Foundation" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * nor may "Apache" appear in their name, without prior written * permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation and was * originally based on software copyright (c) 2000, International * Business Machines, Inc., http://www.apache.org. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. */ package org.apache.soap.encoding.soapenc; import java.beans.*; import java.io.*; import java.util.*; import java.lang.reflect.*; import org.w3c.dom.*; import org.apache.soap.util.*; import org.apache.soap.util.xml.*; import org.apache.soap.*; import org.apache.soap.rpc.*; /** * A <code>CollectionSerializer</code> can be used to serialize and * deserialize Collections using the <code>SOAP-ENC</code> * encoding style. This is a quick implementation that simply * delegates to the VectorSerializer. * * @author Scott Nichol ([EMAIL PROTECTED]) */ public class CollectionSerializer implements Serializer, Deserializer { private final VectorSerializer vectorSer = new VectorSerializer(); public void marshall(String inScopeEncStyle, Class javaType, Object src, Object context, Writer sink, NSStack nsStack, XMLJavaMappingRegistry xjmr, SOAPContext ctx) throws IllegalArgumentException, IOException { Vector vector = null; if (src instanceof Vector) { vector = (Vector) src; } else if (src instanceof Collection) { vector = new Vector((Collection) src); } else { throw new IllegalArgumentException("Tried to pass a '" + src.getClass().toString() + "' to CollectionSerializer"); } vectorSer.marshall(inScopeEncStyle, javaType, vector, context, sink, nsStack, xjmr, ctx); } public Bean unmarshall(String inScopeEncStyle, QName elementType, Node src, XMLJavaMappingRegistry xjmr, SOAPContext ctx) throws IllegalArgumentException { Bean bean = vectorSer.unmarshall(inScopeEncStyle, elementType, src, xjmr, ctx); // Create a new bean based on the de-serialized vector // and elementType Class javaType = xjmr.queryJavaType(elementType, inScopeEncStyle); if (javaType != null) { bean.type = javaType; if (javaType.equals(Stack.class)) { Stack s = new Stack(); Vector v = (Vector) bean.value; for (int i = 0; i < v.size(); i++) s.addElement(v.elementAt(i)); bean.value = s; } else if (javaType.equals(List.class) || javaType.equals(ArrayList.class)) { bean.value = new ArrayList((Vector) bean.value); } else if (javaType.equals(LinkedList.class)) { bean.value = new LinkedList((Vector) bean.value); } else if (javaType.equals(Set.class) || javaType.equals(SortedSet.class) || javaType.equals(TreeSet.class)) { bean.value = new TreeSet((Vector) bean.value); } else if (javaType.equals(HashSet.class)) { bean.value = new HashSet((Vector) bean.value); } } return bean; } }
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>