[ http://jira.codehaus.org/browse/XFIRE-839?page=comments#action_85157 ] 
            
Joost den Boer commented on XFIRE-839:
--------------------------------------

As a last test, I changed the binding for ResultStringListUoCode.result to be 
of type Hashtable<String, List<Object>>.
The WSDL and XML seem ok, on the client again a StackOverflowException occurs. 
The List just contains 2 objects. There are no circular references.

Binding:
<mappings xmlns:ail="http://www.aegon.com/ail/spil/Service";>
        <mapping name="ail:ResultStringListUoCode">

                <!-- ignore succes property. Is determined by errorResult 
value. -->
                <property name="succes" ignore="true"/>
                
                <!-- global -->
                <property name="errorResult" class="java.util.Hashtable" 
                                keyType="java.lang.String"
                                componentType="java.lang.String" />

                <property name="result" class="java.util.Hashtable"
                                keyType="java.lang.String" 
                                componentType="#codes" />
                <component name="codes" class="java.util.List" 
componentType="java.lang.Object" />

        </mapping>
</mappings>

WSDL:
...
<xsd:complexType name="ResultStringListUoCode">
<xsd:sequence>
<xsd:element minOccurs="0" name="errorResult" nillable="true" 
type="tns:string2stringMap"/>
<xsd:element minOccurs="0" name="result" nillable="true" 
type="tns:string2ArrayOfAnyTypeMap"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="string2ArrayOfAnyTypeMap">
<xsd:sequence>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="entry">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="0" name="key" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="value" 
type="xsd:ArrayOfAnyType"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
...

XML:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"; 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
   <soap:Body>
      <listCodesResponse xmlns="http://www.aegon.com/ail/spil/Service";>
         <out xmlns="http://www.aegon.com/ail/spil/Service"; 
xsi:type="ResultStringListUoCode">
            <errorResult xsi:nil="true"></errorResult>
            <result>
               <entry>
                  <key>VoCodeList</key>
                  <value>
                     <xsd:anyType xsi:type="UoCode">
                        <code>code1</code>
                        <description>this is code 1</description>
                        <language>nl</language>
                     </xsd:anyType>
                     <xsd:anyType xsi:type="UoCode">
                        <code>code2</code>
                        <description>Eso es code dos</description>
                        <language>es</language>
                     </xsd:anyType>
                  </value>
               </entry>
            </result>
         </out>
      </listCodesResponse>
   </soap:Body></soap:Envelope>



> Subclassed POJO not correct in WSDL and webservice XML
> ------------------------------------------------------
>
>                 Key: XFIRE-839
>                 URL: http://jira.codehaus.org/browse/XFIRE-839
>             Project: XFire
>          Issue Type: Bug
>          Components: Aegis Module
>    Affects Versions: 1.2.4
>         Environment: IBM RAD 6 with WAS 5.1 Test Environment
>            Reporter: Joost den Boer
>         Assigned To: Dan Diephouse
>
> I have several webservices. All methods return an IResult (=interface). Most 
> methods return a ResultImpl object (implements IResult).
> The ResultImpl object contains a Hashtable property 'result'. For ResultImpl, 
> the Aegis binding defines this property to be of type <String>,<Object>.
> ResultImpl binding:
> <mappings xmlns:ail="http://www.aegon.com/ail/spil/Service";>
>       <mapping name="ail:ResultImpl">
>               <!-- ignore succes property. Is determined by errorResult 
> value. -->
>               <property name="succes" ignore="true"/>
>               
>               <!-- global -->
>               <property name="errorResult" class="java.util.Hashtable" 
>                               keyType="java.lang.String"
>                               componentType="java.lang.String" />
>               <property name="result" class="java.util.Hashtable" 
>                               keyType="java.lang.String" 
>                               componentType="java.lang.Object" />
>       </mapping>
> </mappings>
> When the server returns a result object containing a Hashtable where the 
> value is a List<UoCode>, Aegis somehow returns the List as an ArrayOfString. 
> See XML below:
> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"; 
> xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
>    <soap:Body>
>       <listCodesResponse xmlns="http://www.aegon.com/ail/spil/Service";>
>          <out xmlns="http://www.aegon.com/ail/spil/Service"; 
> xsi:type="ResultImpl">
>             <errorResult xsi:nil="true"></errorResult>
>             <result>
>                <entry>
>                   <key xsi:type="xsd:string">VoCodeList</key>
>                   <value xsi:type="ArrayOfString">
>                      <string xsi:type="UoCode">
>                         <code>code1</code>
>                         <description>this is code 1</description>
>                         <language>nl</language>
>                      </string>
>                   </value>
>                </entry>
>             </result>
>          </out>
>       </listCodesResponse>
>    </soap:Body></soap:Envelope>
> On the client, when receiving this xml, a StackOverflowException occurs. As 
> soon as it reaches ObjectType.readObject( ..), this method keeps calling 
> itself.
> To workaround this problem, I created the ResultStringListUoCode object which 
> extends ResultImpl and created a binding for this object which specifies the 
> result property to be a Hashtable of type <String,List<UoCode>>.
> ResultStringListUoCode binding:
> <mappings xmlns:ail="http://www.aegon.com/ail/spil/Service";>
>       <mapping name="ail:ResultStringListUoCode">
>               <property name="result" class="java.util.Hashtable"
>                               keyType="java.lang.String" 
>                               componentType="#codes" />
>               <component name="codes" class="java.util.List" 
> componentType="nl.aegon.spilus.code.UoCode" />
>       </mapping>
> </mappings>
> The WSDL however does NOT show the result property as defined in the 
> ResultStringListUoCode binding, but still shows the binding of the parent 
> class ResultImpl. See WSDL fragment:
> ....
> <xsd:complexType name="ResultStringListUoCode">
>     <xsd:complexContent>
>         <xsd:extension base="tns:ResultImpl"/>
>     </xsd:complexContent>
> </xsd:complexType>
> <xsd:complexType name="ResultImpl">
>     <xsd:sequence>
>         <xsd:element minOccurs="0" name="errorResult" nillable="true" 
> type="tns:string2stringMap"/>
>         <xsd:element minOccurs="0" name="result" nillable="true" 
> type="tns:anyType2anyTypeMap"/>
>     </xsd:sequence>
> </xsd:complexType>
> ....
> Because the ResultStringListUoCode binding is not used, the List<UoCode> 
> object is still returned as a ArrayOfString like in the XML above while the 
> xsi:type is ResultStringListUoCode. And therefore the client still has a 
> StackOverflowException reading the XML response.
> So there are really 2 problems : 
> 1. If a Map value is a List of Object's, it is returned as an ArrayOfString 
> (which causes StackOverflowException on client)
> 2. A subclass property defined in a binding is not used for WSDL and XML

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe from this list please visit:

    http://xircles.codehaus.org/manage_email

Reply via email to