xsd:nillable element causes endless loop on JSON serialization of JAXB object
-----------------------------------------------------------------------------

                 Key: TUSCANY-3444
                 URL: https://issues.apache.org/jira/browse/TUSCANY-3444
             Project: Tuscany
          Issue Type: Bug
            Reporter: Kelvin Goodson


When returning an element of type JAXB generated type Plan, generated using the 
schema below, an endless loop is entered that eventually creates an out of 
memory error (see below also).  -- 

Removing the nillable from the dueDate element of WorkItem fixes the problem.

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="http://www.example.com/tracking"; 
                 xmlns:jagg="http://www.example.com/tracking"; 
            xmlns:xsd="http://www.w3.org/2001/XMLSchema";>
    <xsd:element name="plan" type="jagg:Plan"></xsd:element>
    <xsd:complexType name="Plan">
        <xsd:sequence>
                <xsd:element name="milestones" type="jagg:Milestones" 
maxOccurs="1" minOccurs="1"></xsd:element>
                <xsd:element name="workitems" type="jagg:WorkItems" 
maxOccurs="1" minOccurs="1"></xsd:element>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="WorkItem">
        <xsd:annotation>
                <xsd:documentation>The milestone or deliverable name that we 
require this function for</xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
                <xsd:element name="ID" type="xsd:string"></xsd:element>
                <xsd:element name="responsible" type="xsd:string" maxOccurs="1" 
minOccurs="0"></xsd:element>
                <xsd:element name="dueDate" type="xsd:string"
                        nillable="true" maxOccurs="1" minOccurs="0"/>
                <xsd:element name="jira" type="xsd:string" maxOccurs="1" 
minOccurs="0"></xsd:element>
                <xsd:element name="status" type="xsd:string" maxOccurs="1" 
minOccurs="0"></xsd:element>
                <xsd:element name="repository_vid" type="xsd:string" 
maxOccurs="1" minOccurs="0"></xsd:element>
            <xsd:element name="note" type="xsd:string" maxOccurs="1" 
minOccurs="0">
                </xsd:element>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="MileStone">
        <xsd:sequence>
                <xsd:element name="dueDate" type="xsd:string"></xsd:element>

                <xsd:element name="deliveredby" type="xsd:string"
                        maxOccurs="1" minOccurs="0">
                </xsd:element>
                <xsd:element name="note" type="xsd:string" maxOccurs="1"
                        minOccurs="0">
                </xsd:element>
                <xsd:element name="workItem" type="xsd:string" 
maxOccurs="unbounded" minOccurs="0"></xsd:element>
        </xsd:sequence>
        <xsd:attribute name="ID" type="xsd:string"></xsd:attribute>

    </xsd:complexType>

    <xsd:complexType name="Milestones">
        <xsd:sequence>
                <xsd:element name="milestone" type="jagg:MileStone" 
maxOccurs="unbounded" minOccurs="0"></xsd:element>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="WorkItems">
        <xsd:sequence>
                <xsd:element name="workitem" type="jagg:WorkItem" 
maxOccurs="unbounded" minOccurs="0"></xsd:element>
        </xsd:sequence>
    </xsd:complexType>

</xsd:schema>

plan.composite running
26-Jan-2010 11:36:52 org.jabsorb.serializer.impl.BeanSerializer analyzeBean
INFO: analyzing com.example.ipo.jaxb.Plan
26-Jan-2010 11:36:52 org.jabsorb.serializer.impl.BeanSerializer analyzeBean
INFO: analyzing com.example.ipo.jaxb.Milestones
26-Jan-2010 11:36:52 org.jabsorb.serializer.impl.BeanSerializer analyzeBean
INFO: analyzing com.example.ipo.jaxb.MileStone
26-Jan-2010 11:36:52 org.jabsorb.serializer.impl.BeanSerializer analyzeBean
INFO: analyzing com.example.ipo.jaxb.WorkItems
26-Jan-2010 11:36:52 org.jabsorb.serializer.impl.BeanSerializer analyzeBean
INFO: analyzing com.example.ipo.jaxb.WorkItem
26-Jan-2010 11:36:52 org.jabsorb.serializer.impl.BeanSerializer analyzeBean
INFO: analyzing javax.xml.bind.JAXBElement
26-Jan-2010 11:36:52 org.jabsorb.serializer.impl.BeanSerializer analyzeBean
INFO: analyzing java.lang.Class
26-Jan-2010 11:36:52 org.jabsorb.serializer.impl.BeanSerializer analyzeBean
INFO: analyzing java.lang.reflect.Method
26-Jan-2010 11:36:52 org.jabsorb.serializer.impl.BeanSerializer analyzeBean
INFO: analyzing java.security.ProtectionDomain
26-Jan-2010 11:36:52 org.jabsorb.serializer.impl.BeanSerializer analyzeBean
INFO: analyzing java.security.Permissions
26-Jan-2010 11:36:52 org.jabsorb.serializer.impl.BeanSerializer analyzeBean
INFO: analyzing sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl
26-Jan-2010 11:36:52 org.jabsorb.serializer.impl.BeanSerializer analyzeBean
INFO: analyzing sun.reflect.generics.reflectiveObjects.WildcardTypeImpl
26-Jan-2010 11:36:52 org.jabsorb.serializer.impl.BeanSerializer analyzeBean
INFO: analyzing java.lang.Package
26-Jan-2010 11:36:52 org.jabsorb.serializer.impl.BeanSerializer analyzeBean
INFO: analyzing java.lang.reflect.Constructor
26-Jan-2010 11:36:52 org.jabsorb.serializer.impl.BeanSerializer analyzeBean
INFO: analyzing java.lang.reflect.Field
26-Jan-2010 11:36:53 org.jabsorb.serializer.impl.BeanSerializer analyzeBean
INFO: analyzing sun.reflect.generics.reflectiveObjects.TypeVariableImpl
26-Jan-2010 11:36:53 org.jabsorb.serializer.impl.BeanSerializer analyzeBean
INFO: analyzing sun.reflect.generics.reflectiveObjects.GenericArrayTypeImpl
26-Jan-2010 11:36:53 org.jabsorb.serializer.impl.BeanSerializer analyzeBean
INFO: analyzing $Proxy17
26-Jan-2010 11:36:53 org.jabsorb.serializer.impl.BeanSerializer analyzeBean
INFO: analyzing java.net.Proxy$Type
26-Jan-2010 11:36:53 org.jabsorb.serializer.impl.BeanSerializer analyzeBean
INFO: analyzing java.net.InetAddress$Cache$Type
26-Jan-2010 11:36:53 org.jabsorb.serializer.impl.BeanSerializer analyzeBean
INFO: analyzing java.lang.Thread$State
26-Jan-2010 11:36:53 org.jabsorb.serializer.impl.BeanSerializer analyzeBean
INFO: analyzing java.util.concurrent.TimeUnit$1
26-Jan-2010 11:36:53 org.jabsorb.serializer.impl.BeanSerializer analyzeBean
INFO: analyzing java.util.concurrent.TimeUnit$2
26-Jan-2010 11:36:53 org.jabsorb.serializer.impl.BeanSerializer analyzeBean
INFO: analyzing java.util.concurrent.TimeUnit$3
26-Jan-2010 11:36:53 org.jabsorb.serializer.impl.BeanSerializer analyzeBean
INFO: analyzing java.util.concurrent.TimeUnit$4
26-Jan-2010 11:36:53 org.jabsorb.serializer.impl.BeanSerializer analyzeBean
INFO: analyzing java.util.concurrent.TimeUnit$5
26-Jan-2010 11:36:53 org.jabsorb.serializer.impl.BeanSerializer analyzeBean
INFO: analyzing java.util.concurrent.TimeUnit$6



26-Jan-2010 11:36:53 org.jabsorb.serializer.impl.BeanSerializer analyzeBean
INFO: analyzing java.util.concurrent.TimeUnit$7
26-Jan-2010 11:36:59 org.apache.tuscany.sca.http.jetty.JettyLogger warn
WARNING: Error for /Plan/PlanView
java.lang.OutOfMemoryError: Java heap space
        at java.util.LinkedList.toArray(Unknown Source)
        at java.util.ArrayList.<init>(Unknown Source)
        at org.jabsorb.serializer.FixUp.<init>(FixUp.java:57)
        at 
org.jabsorb.serializer.SerializerState.addFixUp(SerializerState.java:74)
        at org.jabsorb.JSONSerializer.marshall(JSONSerializer.java:376)
        at 
org.jabsorb.serializer.impl.BeanSerializer.marshall(BeanSerializer.java:240)
        at org.jabsorb.JSONSerializer.marshall(JSONSerializer.java:390)
        at 
org.jabsorb.serializer.impl.ArraySerializer.marshall(ArraySerializer.java:300)
.........
many more repetitions of this method call pairing

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

Reply via email to