You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Daniel Kulp (JIRA)" <ji...@apache.org> on 2010/03/18 18:20:27 UTC

[jira] Resolved: (CXF-2699) MapType does not output XML that matches the generated schema

     [ https://issues.apache.org/jira/browse/CXF-2699?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Daniel Kulp resolved CXF-2699.
------------------------------

    Resolution: Fixed


I've updated the writing to not output the value element if null to match the existing schema.   (minOccurs is faster than nillable due to less data transferred and less parsing and such).   In the future, we could add an option or something to make it nillable.    (I also took off the minOccurs=0 for the key as keys are required.

> MapType does not output XML that matches the generated schema
> -------------------------------------------------------------
>
>                 Key: CXF-2699
>                 URL: https://issues.apache.org/jira/browse/CXF-2699
>             Project: CXF
>          Issue Type: Bug
>          Components: Aegis Databinding
>    Affects Versions: 2.2.6
>         Environment: windows xp, java 5
>            Reporter: alistair
>            Assignee: Daniel Kulp
>             Fix For: 2.2.7
>
>
> The MapType class (in org.apache.cxf.aegis.type.collection) creates the schema element for maps. It does not set nillable for the value in the entry.
> It is legal to have 
> HashMap<String, Object> myMap containing {myKey->null} and to return such a map from a call to a web method. 
> The following wsdl is generated : 
> ...
> <xsd:element name="myMap" nillable="true" type="string2anyTypeMap" /> 
> ...
> <xsd:complexType name="string2anyTypeMap"> 
> <xsd:sequence> 
> <xsd:element maxOccurs="unbounded" minOccurs="0" name="entry"> 
> <xsd:complexType> 
> <xsd:sequence> 
> <xsd:element minOccurs="0" name="key" type="xsd:string" /> 
> <xsd:element minOccurs="0" name="value" type="xsd:anyType" /> 
> </xsd:sequence> 
> </xsd:complexType> 
> On a query that retrieves myMap I can get 
> ...
>    <entry>
>                            <key>myKey</key>
>                            <value ns6:nil="true" xmlns:ns6="http://www.w3.org/2001/XMLSchema-instance"/>
>    </ns1:entry>
> which does not conform to the generated schema.
> In type MapType createElement should probably be renamed to createKeyElement and a new createValueElement method that sets nillable to the result of type.isNillable().
> Current method:
>   /**
>      * Creates a element in a sequence for the key type and the value type.
>      */
>     private void createElement(XmlSchemaSequence seq, QName name, Type type) {
>         XmlSchemaElement element = new XmlSchemaElement();
>         seq.getItems().add(element);
>         element.setName(name.getLocalPart());
>         element.setSchemaTypeName(type.getSchemaType());
>         element.setMinOccurs(0);
>         element.setMaxOccurs(1);
>     }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.