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.