You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2010/03/18 18:14:32 UTC

svn commit: r924901 - in /cxf/branches/2.2.x-fixes: ./ rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/collection/MapType.java

Author: dkulp
Date: Thu Mar 18 17:14:31 2010
New Revision: 924901

URL: http://svn.apache.org/viewvc?rev=924901&view=rev
Log:
Merged revisions 924896 via svnmerge from 
https://svn.apache.org/repos/asf/cxf/trunk

........
  r924896 | dkulp | 2010-03-18 13:04:23 -0400 (Thu, 18 Mar 2010) | 2 lines
  
  [CXF-2720, CXF-2699] Fixes for Aegis MapType for subclasses and
  minOccurs=0 elements
........

Modified:
    cxf/branches/2.2.x-fixes/   (props changed)
    cxf/branches/2.2.x-fixes/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/collection/MapType.java

Propchange: cxf/branches/2.2.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: cxf/branches/2.2.x-fixes/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/collection/MapType.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/collection/MapType.java?rev=924901&r1=924900&r2=924901&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/collection/MapType.java (original)
+++ cxf/branches/2.2.x-fixes/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/collection/MapType.java Thu Mar 18 17:14:31 2010
@@ -61,8 +61,6 @@ public class MapType extends Type {
     public Object readObject(MessageReader reader, Context context) throws DatabindingException {
         Map<Object, Object> map = instantiateMap();
         try {
-            Type kType = getKeyType();
-            Type vType = getValueType();
 
             while (reader.hasMoreElementReaders()) {
                 MessageReader entryReader = reader.getNextElementReader();
@@ -72,12 +70,18 @@ public class MapType extends Type {
                     Object value = null;
 
                     while (entryReader.hasMoreElementReaders()) {
-                                                
+
                         MessageReader evReader = entryReader.getNextElementReader();
 
                         if (evReader.getName().equals(getKeyName())) {
+                            Type kType = TypeUtil.getReadType(evReader.getXMLStreamReader(),
+                                                              context.getGlobalContext(), 
+                                                              getKeyType());
                             key = kType.readObject(evReader, context);
                         } else if (evReader.getName().equals(getValueName())) {
+                            Type vType = TypeUtil.getReadType(evReader.getXMLStreamReader(),
+                                                              context.getGlobalContext(),
+                                                              getValueType());
                             value = vType.readObject(evReader, context);
                         } else {
                             readToEnd(evReader);
@@ -107,7 +111,7 @@ public class MapType extends Type {
      * extends the <code>Map</code> interface a <code>HashMap</code> is
      * created. Otherwise the map classs (i.e. LinkedHashMap) is instantiated
      * using the default constructor.
-     * 
+     *
      * @return
      */
     @SuppressWarnings("unchecked")
@@ -167,10 +171,11 @@ public class MapType extends Type {
         MessageWriter keyWriter = entryWriter.getElementWriter(getKeyName());
         kType.writeObject(entry.getKey(), keyWriter, context);
         keyWriter.close();
-
-        MessageWriter valueWriter = entryWriter.getElementWriter(getValueName());
-        vType.writeObject(entry.getValue(), valueWriter, context);
-        valueWriter.close();
+        if (entry.getValue() != null) {
+            MessageWriter valueWriter = entryWriter.getElementWriter(getValueName());
+            vType.writeObject(entry.getValue(), valueWriter, context);
+            valueWriter.close();
+        }
 
         entryWriter.close();
     }
@@ -199,19 +204,24 @@ public class MapType extends Type {
         XmlSchemaSequence evSequence = new XmlSchemaSequence();
         evType.setParticle(evSequence);
 
-        createElement(evSequence, getKeyName(), kType);
-        createElement(evSequence, getValueName(), vType);
+        createElement(evSequence, getKeyName(), kType, false);
+        createElement(evSequence, getValueName(), vType, true);
     }
 
     /**
      * Creates a element in a sequence for the key type and the value type.
      */
-    private void createElement(XmlSchemaSequence seq, QName name, Type type) {
+    private void createElement(XmlSchemaSequence seq, QName name,
+                               Type type, boolean optional) {
         XmlSchemaElement element = new XmlSchemaElement();
         seq.getItems().add(element);
         element.setName(name.getLocalPart());
         element.setSchemaTypeName(type.getSchemaType());
-        element.setMinOccurs(0);
+        if (optional) {
+            element.setMinOccurs(0);
+        } else {
+            element.setMinOccurs(1);            
+        }
         element.setMaxOccurs(1);
     }