You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by Kaleb Walton <kd...@us.ibm.com> on 2007/10/02 22:07:35 UTC

Empty List's not being marshaled?


I'm using the simple server configured via Spring. When an object contains
an empty list (not null) my response does not return it as an empty list -
it just excludes the property from the response. Is there any way to force
it to include the property?

Regards,
Kaleb

Re: Empty List's not being marshaled?

Posted by gdprao <gd...@yahoo.com>.
Hi,

I have also come across this problem of CXF not marshalling the empty tags. 
For example if there no middle name for the customer, I am thinking of
having an empty element to show up in the response rather than missing the
whole element itself. I have modified my XSD to with nillable="true"
attribute, then my REST service has generated the following response XML
putting xsi:nil="true" while I am expecting just <middleName/>.  My JSON end
point with the same service has totally failed with the following exception. 
Please advice to address this issue.

Thanks,
Durga

Response XML:

<ns2:customerStatus xmlns:ns2="http://mydomain.com/types">
<id>602569</id>
<firstName>test</firstName>
<middleName xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:nil="true" />
<lastName>last</lastName>
<address1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:nil="true" />
<status>Active</status>
</ns2:customerStatus>

Exception stack for JSON Service:

Caused by: java.lang.IllegalStateException: Invalid JSON namespace:
http://www.w3.org/2001/XMLSchema-instance
	at
org.codehaus.jettison.mapped.MappedNamespaceConvention.getJSONNamespace(MappedNamespaceConvention.java:148)
	at
org.codehaus.jettison.mapped.MappedNamespaceConvention.createAttributeKey(MappedNamespaceConvention.java:136)
	at
org.codehaus.jettison.mapped.MappedXMLStreamWriter.writeAttribute(MappedXMLStreamWriter.java:89)
	at
com.sun.xml.bind.v2.runtime.output.XMLStreamWriterOutput.attribute(XMLStreamWriterOutput.java:90)
	at
com.sun.xml.bind.v2.runtime.XMLSerializer.attribute(XMLSerializer.java:402)
	at
com.sun.xml.bind.v2.runtime.XMLSerializer.writeXsiNilTrue(XMLSerializer.java:719)
	at
com.sun.xml.bind.v2.runtime.property.SingleElementLeafProperty.serializeBody(SingleElementLeafProperty.java:66)
	at
com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:286)
	at
com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:619)

dkulp wrote:
> 
> 
> On Wednesday 03 October 2007, Benson Margulies wrote:
>> Is this the 'nillable' / 'minOccurs' issue?
> 
> This is slightly different but comes down to the same solution.   That 
> issue is basically that we treat an empty list exactly the same on the 
> wire as a null list.   With the normal jaxb mapping, there isn't a way 
> to say weather the list was null or empty.   Either way ends up with no 
> data at all written out on the wire.   You end up having to create a 
> wrapper type that is then nillable.
> 
> Dan
> 
>>
>> > -----Original Message-----
>> > From: Daniel Kulp [mailto:dkulp@apache.org]
>> > Sent: Wednesday, October 03, 2007 7:47 AM
>> > To: cxf-user@incubator.apache.org
>> > Cc: Kaleb Walton
>> > Subject: Re: Empty List's not being marshaled?
>> >
>> > On Wednesday 03 October 2007, Kaleb Walton wrote:
>> > > Do you know why that is the case? Maybe because since it's empty
>>
>> they
>>
>> > > figured there shouldn't be any wasted space in the XML doc?
>> >
>> > It's probably a combination of:
>> > 1) Less bandwidth used on the wire
>> >
>> > 2) Mappings in other toolkits - toolkits like JAXB and .NET and
>>
>> JAX-RPC,
>>
>> > etc.... usually map the "wrapper" type to an object that holds the
>>
>> list
>>
>> > or array, but would map the current thing directly to an array or
>>
>> list.
>>
>> > That simplifies the programming model.
>> >
>> > 2) Simplified schema.   You don't end up with a wrapper type for
>> > every list.   Imaging, for example, a method that takes 3 lists.  
>> > With wrapped/doc/lit, you currently end up with something like:
>> > <element name="doFooRequest">
>> >  <complexType>
>> >   <sequence>
>> >     <element name="foo" type="string"
>> >            minOccurs="0" maxOccurs="unbounded" nillable="true"/>
>> >     <element name="bar" type="long"
>> >            minOccurs="0" maxOccurs="unbounded" nillable="true"/>
>> >     <element name="snarf" type="float"
>> >            minOccurs="0" maxOccurs="unbounded" nillable="true"/>
>> > </sequence>
>> > <complexType>
>> > </element>
>> >
>> > If you had to wrap all the lists up, it would be something like:
>> > <complexType name="StringList">
>> >   <sequence>
>> >     <element name="item" type="string"
>> >            minOccurs="0" maxOccurs="unbounded" nillable="true"/>
>> >   </sequence>
>> > <complexType>
>> > <complexType name="IntList">
>> >   <sequence>
>> >     <element name="item" type="int"
>> >            minOccurs="0" maxOccurs="unbounded" nillable="true"/>
>> >   </sequence>
>> > <complexType>
>> > <complexType name="FloatList">
>> >   <sequence>
>> >     <element name="item" type="float"
>> >            minOccurs="0" maxOccurs="unbounded" nillable="true"/>
>> >   </sequence>
>> > <complexType>
>> > <element name="doFooRequest">
>> >  <complexType>
>> >   <sequence>
>> >     <element name="foo" type="tns:StringList"/>
>> >     <element name="bar" type="tns:IntList"/>
>> >     <element name="snarf" type="tns:FloatList"/>
>> > </sequence>
>> > <complexType>
>> > </element>
>> >
>> > Basically, you end up with a significantly larger schema.
>> >
>> > Dan
>> >
>> > > It's a pain for my consumers to have to check for the existence of
>> > > a variable before trying to parse it out - not the end of the
>> > > world
>>
>> but
>>
>> > > it adds somewhat redundant code.
>> > >
>> > >
>> > > Regards,
>> > > Kaleb
>> > >
>> > > |------------>
>> > > | From:      |
>> > > |------------>
>> >
>> >-------------------------------------------------------------------
>> >
>> >-------------------------------------------------------------------
>> >
>> > >   >------------|
>> > >   >
>> > >   |Daniel Kulp <dk...@apache.org>
>> >
>> >-------------------------------------------------------------------
>> >
>> >-------------------------------------------------------------------
>> >
>> > >   >------------|
>> > > |
>> > > |------------>
>> > > | To:        |
>> > > |------------>
>> >
>> >-------------------------------------------------------------------
>> >
>> >-------------------------------------------------------------------
>> >
>> > >   >------------|
>> > >   >
>> > >   |cxf-user@incubator.apache.org
>> >
>> >-------------------------------------------------------------------
>> >
>> >-------------------------------------------------------------------
>> >
>> > >   >------------|
>> > > |
>> > > |------------>
>> > > | Cc:        |
>> > > |------------>
>> >
>> >-------------------------------------------------------------------
>> >
>> >-------------------------------------------------------------------
>> >
>> > >   >------------|
>> > >   >
>> > >   |Kaleb Walton/Southfield/IBM@IBMUS
>> >
>> >-------------------------------------------------------------------
>> >
>> >-------------------------------------------------------------------
>> >
>> > >   >------------|
>> > > |
>> > > |------------>
>> > > | Date:      |
>> > > |------------>
>> >
>> >-------------------------------------------------------------------
>> >
>> >-------------------------------------------------------------------
>> >
>> > >   >------------|
>> > >   >
>> > >   |10/02/2007 05:55 PM
>> >
>> >-------------------------------------------------------------------
>> >
>> >-------------------------------------------------------------------
>> >
>> > >   >------------|
>> > > |
>> > > |------------>
>> > > | Subject:   |
>> > > |------------>
>> >
>> >-------------------------------------------------------------------
>> >
>> >-------------------------------------------------------------------
>> >
>> > >   >------------|
>> > >   >
>> > >   |Re: Empty List's not being marshaled?
>> >
>> >-------------------------------------------------------------------
>> >
>> >-------------------------------------------------------------------
>> >
>> > >   >------------|
>> > >
>> > > On Tuesday 02 October 2007, Kaleb Walton wrote:
>> > > > I'm using the simple server configured via Spring. When an
>> > > > object contains an empty list (not null) my response does not
>> > > > return it
>>
>> as
>>
>> > > > an empty list - it just excludes the property from the response.
>>
>> Is
>>
>> > > > there any way to force it to include the property?
>> > >
>> > > I'd probably have to see both the schema and the soap message.
>>
>> Most
>>
>> > > likely, the answer is no without creating a holder bean to hold
>> > > the list.
>> > >
>> > > For the most part, when we see something like List<String>, we
>> > > just create:
>> > > <element name="foo" type="string" maxOccurs="unbounded"
>> > > nillable="true"/>
>> > >
>> > > In that case, if the list is empty (or even if the list is null),
>> > > nothing representing the list will appear on the wire.   That is
>> > > how the JAXB spec calls for it to be done.  If you want something
>> > > always on the wire, the schema would have to be something like:
>> > > <element name="fooList">
>> > > <complexType>
>> > > <sequence>
>> > > <element name="foo" type="string" maxOccurs="unbounded"
>> > > nillable="true"/> </sequence>
>> > > <complexType>
>> > > </element>
>> > >
>> > > and a "FooList" class would be created to hold the List<String>.
>> > >
>> > > --
>> > > J. Daniel Kulp
>> > > Principal Engineer
>> > > IONA
>> > > P: 781-902-8727    C: 508-380-7194
>> > > daniel.kulp@iona.com
>> > > http://www.dankulp.com/blog
>> >
>> > --
>> > J. Daniel Kulp
>> > Principal Engineer
>> > IONA
>> > P: 781-902-8727    C: 508-380-7194
>> > daniel.kulp@iona.com
>> > http://www.dankulp.com/blog
> 
> 
> 
> -- 
> J. Daniel Kulp
> Principal Engineer
> IONA
> P: 781-902-8727    C: 508-380-7194
> daniel.kulp@iona.com
> http://www.dankulp.com/blog
> 
> 

-- 
View this message in context: http://www.nabble.com/Empty-List%27s-not-being-marshaled--tf4557811.html#a13031644
Sent from the cxf-user mailing list archive at Nabble.com.


Re: Empty List's not being marshaled?

Posted by Daniel Kulp <dk...@apache.org>.
On Wednesday 03 October 2007, Benson Margulies wrote:
> Is this the 'nillable' / 'minOccurs' issue?

This is slightly different but comes down to the same solution.   That 
issue is basically that we treat an empty list exactly the same on the 
wire as a null list.   With the normal jaxb mapping, there isn't a way 
to say weather the list was null or empty.   Either way ends up with no 
data at all written out on the wire.   You end up having to create a 
wrapper type that is then nillable.

Dan

>
> > -----Original Message-----
> > From: Daniel Kulp [mailto:dkulp@apache.org]
> > Sent: Wednesday, October 03, 2007 7:47 AM
> > To: cxf-user@incubator.apache.org
> > Cc: Kaleb Walton
> > Subject: Re: Empty List's not being marshaled?
> >
> > On Wednesday 03 October 2007, Kaleb Walton wrote:
> > > Do you know why that is the case? Maybe because since it's empty
>
> they
>
> > > figured there shouldn't be any wasted space in the XML doc?
> >
> > It's probably a combination of:
> > 1) Less bandwidth used on the wire
> >
> > 2) Mappings in other toolkits - toolkits like JAXB and .NET and
>
> JAX-RPC,
>
> > etc.... usually map the "wrapper" type to an object that holds the
>
> list
>
> > or array, but would map the current thing directly to an array or
>
> list.
>
> > That simplifies the programming model.
> >
> > 2) Simplified schema.   You don't end up with a wrapper type for
> > every list.   Imaging, for example, a method that takes 3 lists.  
> > With wrapped/doc/lit, you currently end up with something like:
> > <element name="doFooRequest">
> >  <complexType>
> >   <sequence>
> >     <element name="foo" type="string"
> >            minOccurs="0" maxOccurs="unbounded" nillable="true"/>
> >     <element name="bar" type="long"
> >            minOccurs="0" maxOccurs="unbounded" nillable="true"/>
> >     <element name="snarf" type="float"
> >            minOccurs="0" maxOccurs="unbounded" nillable="true"/>
> > </sequence>
> > <complexType>
> > </element>
> >
> > If you had to wrap all the lists up, it would be something like:
> > <complexType name="StringList">
> >   <sequence>
> >     <element name="item" type="string"
> >            minOccurs="0" maxOccurs="unbounded" nillable="true"/>
> >   </sequence>
> > <complexType>
> > <complexType name="IntList">
> >   <sequence>
> >     <element name="item" type="int"
> >            minOccurs="0" maxOccurs="unbounded" nillable="true"/>
> >   </sequence>
> > <complexType>
> > <complexType name="FloatList">
> >   <sequence>
> >     <element name="item" type="float"
> >            minOccurs="0" maxOccurs="unbounded" nillable="true"/>
> >   </sequence>
> > <complexType>
> > <element name="doFooRequest">
> >  <complexType>
> >   <sequence>
> >     <element name="foo" type="tns:StringList"/>
> >     <element name="bar" type="tns:IntList"/>
> >     <element name="snarf" type="tns:FloatList"/>
> > </sequence>
> > <complexType>
> > </element>
> >
> > Basically, you end up with a significantly larger schema.
> >
> > Dan
> >
> > > It's a pain for my consumers to have to check for the existence of
> > > a variable before trying to parse it out - not the end of the
> > > world
>
> but
>
> > > it adds somewhat redundant code.
> > >
> > >
> > > Regards,
> > > Kaleb
> > >
> > > |------------>
> > > | From:      |
> > > |------------>
> >
> >-------------------------------------------------------------------
> >
> >-------------------------------------------------------------------
> >
> > >   >------------|
> > >   >
> > >   |Daniel Kulp <dk...@apache.org>
> >
> >-------------------------------------------------------------------
> >
> >-------------------------------------------------------------------
> >
> > >   >------------|
> > > |
> > > |------------>
> > > | To:        |
> > > |------------>
> >
> >-------------------------------------------------------------------
> >
> >-------------------------------------------------------------------
> >
> > >   >------------|
> > >   >
> > >   |cxf-user@incubator.apache.org
> >
> >-------------------------------------------------------------------
> >
> >-------------------------------------------------------------------
> >
> > >   >------------|
> > > |
> > > |------------>
> > > | Cc:        |
> > > |------------>
> >
> >-------------------------------------------------------------------
> >
> >-------------------------------------------------------------------
> >
> > >   >------------|
> > >   >
> > >   |Kaleb Walton/Southfield/IBM@IBMUS
> >
> >-------------------------------------------------------------------
> >
> >-------------------------------------------------------------------
> >
> > >   >------------|
> > > |
> > > |------------>
> > > | Date:      |
> > > |------------>
> >
> >-------------------------------------------------------------------
> >
> >-------------------------------------------------------------------
> >
> > >   >------------|
> > >   >
> > >   |10/02/2007 05:55 PM
> >
> >-------------------------------------------------------------------
> >
> >-------------------------------------------------------------------
> >
> > >   >------------|
> > > |
> > > |------------>
> > > | Subject:   |
> > > |------------>
> >
> >-------------------------------------------------------------------
> >
> >-------------------------------------------------------------------
> >
> > >   >------------|
> > >   >
> > >   |Re: Empty List's not being marshaled?
> >
> >-------------------------------------------------------------------
> >
> >-------------------------------------------------------------------
> >
> > >   >------------|
> > >
> > > On Tuesday 02 October 2007, Kaleb Walton wrote:
> > > > I'm using the simple server configured via Spring. When an
> > > > object contains an empty list (not null) my response does not
> > > > return it
>
> as
>
> > > > an empty list - it just excludes the property from the response.
>
> Is
>
> > > > there any way to force it to include the property?
> > >
> > > I'd probably have to see both the schema and the soap message.
>
> Most
>
> > > likely, the answer is no without creating a holder bean to hold
> > > the list.
> > >
> > > For the most part, when we see something like List<String>, we
> > > just create:
> > > <element name="foo" type="string" maxOccurs="unbounded"
> > > nillable="true"/>
> > >
> > > In that case, if the list is empty (or even if the list is null),
> > > nothing representing the list will appear on the wire.   That is
> > > how the JAXB spec calls for it to be done.  If you want something
> > > always on the wire, the schema would have to be something like:
> > > <element name="fooList">
> > > <complexType>
> > > <sequence>
> > > <element name="foo" type="string" maxOccurs="unbounded"
> > > nillable="true"/> </sequence>
> > > <complexType>
> > > </element>
> > >
> > > and a "FooList" class would be created to hold the List<String>.
> > >
> > > --
> > > J. Daniel Kulp
> > > Principal Engineer
> > > IONA
> > > P: 781-902-8727    C: 508-380-7194
> > > daniel.kulp@iona.com
> > > http://www.dankulp.com/blog
> >
> > --
> > J. Daniel Kulp
> > Principal Engineer
> > IONA
> > P: 781-902-8727    C: 508-380-7194
> > daniel.kulp@iona.com
> > http://www.dankulp.com/blog



-- 
J. Daniel Kulp
Principal Engineer
IONA
P: 781-902-8727    C: 508-380-7194
daniel.kulp@iona.com
http://www.dankulp.com/blog

RE: Empty List's not being marshaled?

Posted by Benson Margulies <bi...@basistech.com>.
Is this the 'nillable' / 'minOccurs' issue?

> -----Original Message-----
> From: Daniel Kulp [mailto:dkulp@apache.org]
> Sent: Wednesday, October 03, 2007 7:47 AM
> To: cxf-user@incubator.apache.org
> Cc: Kaleb Walton
> Subject: Re: Empty List's not being marshaled?
> 
> 
> On Wednesday 03 October 2007, Kaleb Walton wrote:
> > Do you know why that is the case? Maybe because since it's empty
they
> > figured there shouldn't be any wasted space in the XML doc?
> 
> It's probably a combination of:
> 1) Less bandwidth used on the wire
> 
> 2) Mappings in other toolkits - toolkits like JAXB and .NET and
JAX-RPC,
> etc.... usually map the "wrapper" type to an object that holds the
list
> or array, but would map the current thing directly to an array or
list.
> That simplifies the programming model.
> 
> 2) Simplified schema.   You don't end up with a wrapper type for every
> list.   Imaging, for example, a method that takes 3 lists.   With
> wrapped/doc/lit, you currently end up with something like:
> <element name="doFooRequest">
>  <complexType>
>   <sequence>
>     <element name="foo" type="string"
>            minOccurs="0" maxOccurs="unbounded" nillable="true"/>
>     <element name="bar" type="long"
>            minOccurs="0" maxOccurs="unbounded" nillable="true"/>
>     <element name="snarf" type="float"
>            minOccurs="0" maxOccurs="unbounded" nillable="true"/>
> </sequence>
> <complexType>
> </element>
> 
> If you had to wrap all the lists up, it would be something like:
> <complexType name="StringList">
>   <sequence>
>     <element name="item" type="string"
>            minOccurs="0" maxOccurs="unbounded" nillable="true"/>
>   </sequence>
> <complexType>
> <complexType name="IntList">
>   <sequence>
>     <element name="item" type="int"
>            minOccurs="0" maxOccurs="unbounded" nillable="true"/>
>   </sequence>
> <complexType>
> <complexType name="FloatList">
>   <sequence>
>     <element name="item" type="float"
>            minOccurs="0" maxOccurs="unbounded" nillable="true"/>
>   </sequence>
> <complexType>
> <element name="doFooRequest">
>  <complexType>
>   <sequence>
>     <element name="foo" type="tns:StringList"/>
>     <element name="bar" type="tns:IntList"/>
>     <element name="snarf" type="tns:FloatList"/>
> </sequence>
> <complexType>
> </element>
> 
> Basically, you end up with a significantly larger schema.
> 
> Dan
> 
> >
> > It's a pain for my consumers to have to check for the existence of a
> > variable before trying to parse it out - not the end of the world
but
> > it adds somewhat redundant code.
> >
> >
> > Regards,
> > Kaleb
> >
> > |------------>
> > | From:      |
> > |------------>
> > |
> >
>-------------------------------------------------------------------
> >
>-------------------------------------------------------------------
> >   >------------|
> >   >
> >   |Daniel Kulp <dk...@apache.org>
> >   |
> >   |            |
> >   |
> >
>-------------------------------------------------------------------
> >
>-------------------------------------------------------------------
> >   >------------|
> > |
> > |------------>
> > | To:        |
> > |------------>
> > |
> >
>-------------------------------------------------------------------
> >
>-------------------------------------------------------------------
> >   >------------|
> >   >
> >   |cxf-user@incubator.apache.org
> >   |
> >   |            |
> >   |
> >
>-------------------------------------------------------------------
> >
>-------------------------------------------------------------------
> >   >------------|
> > |
> > |------------>
> > | Cc:        |
> > |------------>
> > |
> >
>-------------------------------------------------------------------
> >
>-------------------------------------------------------------------
> >   >------------|
> >   >
> >   |Kaleb Walton/Southfield/IBM@IBMUS
> >   |
> >   |            |
> >   |
> >
>-------------------------------------------------------------------
> >
>-------------------------------------------------------------------
> >   >------------|
> > |
> > |------------>
> > | Date:      |
> > |------------>
> > |
> >
>-------------------------------------------------------------------
> >
>-------------------------------------------------------------------
> >   >------------|
> >   >
> >   |10/02/2007 05:55 PM
> >   |
> >   |            |
> >   |
> >
>-------------------------------------------------------------------
> >
>-------------------------------------------------------------------
> >   >------------|
> > |
> > |------------>
> > | Subject:   |
> > |------------>
> > |
> >
>-------------------------------------------------------------------
> >
>-------------------------------------------------------------------
> >   >------------|
> >   >
> >   |Re: Empty List's not being marshaled?
> >   |
> >   |            |
> >   |
> >
>-------------------------------------------------------------------
> >
>-------------------------------------------------------------------
> >   >------------|
> >
> > On Tuesday 02 October 2007, Kaleb Walton wrote:
> > > I'm using the simple server configured via Spring. When an object
> > > contains an empty list (not null) my response does not return it
as
> > > an empty list - it just excludes the property from the response.
Is
> > > there any way to force it to include the property?
> >
> > I'd probably have to see both the schema and the soap message.
Most
> > likely, the answer is no without creating a holder bean to hold the
> > list.
> >
> > For the most part, when we see something like List<String>, we just
> > create:
> > <element name="foo" type="string" maxOccurs="unbounded"
> > nillable="true"/>
> >
> > In that case, if the list is empty (or even if the list is null),
> > nothing representing the list will appear on the wire.   That is how
> > the JAXB spec calls for it to be done.  If you want something always
> > on the wire, the schema would have to be something like:
> > <element name="fooList">
> > <complexType>
> > <sequence>
> > <element name="foo" type="string" maxOccurs="unbounded"
> > nillable="true"/> </sequence>
> > <complexType>
> > </element>
> >
> > and a "FooList" class would be created to hold the List<String>.
> >
> > --
> > J. Daniel Kulp
> > Principal Engineer
> > IONA
> > P: 781-902-8727    C: 508-380-7194
> > daniel.kulp@iona.com
> > http://www.dankulp.com/blog
> 
> 
> 
> --
> J. Daniel Kulp
> Principal Engineer
> IONA
> P: 781-902-8727    C: 508-380-7194
> daniel.kulp@iona.com
> http://www.dankulp.com/blog

Re: Empty List's not being marshaled?

Posted by Daniel Kulp <dk...@apache.org>.
On Wednesday 03 October 2007, Kaleb Walton wrote:
> Do you know why that is the case? Maybe because since it's empty they
> figured there shouldn't be any wasted space in the XML doc?

It's probably a combination of:
1) Less bandwidth used on the wire

2) Mappings in other toolkits - toolkits like JAXB and .NET and JAX-RPC, 
etc.... usually map the "wrapper" type to an object that holds the list 
or array, but would map the current thing directly to an array or list.   
That simplifies the programming model.

2) Simplified schema.   You don't end up with a wrapper type for every 
list.   Imaging, for example, a method that takes 3 lists.   With 
wrapped/doc/lit, you currently end up with something like:
<element name="doFooRequest">
 <complexType>
  <sequence>
    <element name="foo" type="string" 
           minOccurs="0" maxOccurs="unbounded" nillable="true"/> 
    <element name="bar" type="long" 
           minOccurs="0" maxOccurs="unbounded" nillable="true"/> 
    <element name="snarf" type="float" 
           minOccurs="0" maxOccurs="unbounded" nillable="true"/> 
</sequence>
<complexType>
</element>

If you had to wrap all the lists up, it would be something like:
<complexType name="StringList">
  <sequence>
    <element name="item" type="string" 
           minOccurs="0" maxOccurs="unbounded" nillable="true"/> 
  </sequence>
<complexType>
<complexType name="IntList">
  <sequence>
    <element name="item" type="int" 
           minOccurs="0" maxOccurs="unbounded" nillable="true"/> 
  </sequence>
<complexType>
<complexType name="FloatList">
  <sequence>
    <element name="item" type="float" 
           minOccurs="0" maxOccurs="unbounded" nillable="true"/> 
  </sequence>
<complexType>
<element name="doFooRequest">
 <complexType>
  <sequence>
    <element name="foo" type="tns:StringList"/> 
    <element name="bar" type="tns:IntList"/> 
    <element name="snarf" type="tns:FloatList"/> 
</sequence>
<complexType>
</element>

Basically, you end up with a significantly larger schema.

Dan

>
> It's a pain for my consumers to have to check for the existence of a
> variable before trying to parse it out - not the end of the world but
> it adds somewhat redundant code.
>
>
> Regards,
> Kaleb
>
> |------------>
> | From:      |
> |------------>
> |
>   >-------------------------------------------------------------------
>   >-------------------------------------------------------------------
>   >------------|
>   >
>   |Daniel Kulp <dk...@apache.org>                                     
>   |                                                                   
>   |            |
>   |
>   >-------------------------------------------------------------------
>   >-------------------------------------------------------------------
>   >------------|
> |
> |------------>
> | To:        |
> |------------>
> |
>   >-------------------------------------------------------------------
>   >-------------------------------------------------------------------
>   >------------|
>   >
>   |cxf-user@incubator.apache.org                                      
>   |                                                                   
>   |            |
>   |
>   >-------------------------------------------------------------------
>   >-------------------------------------------------------------------
>   >------------|
> |
> |------------>
> | Cc:        |
> |------------>
> |
>   >-------------------------------------------------------------------
>   >-------------------------------------------------------------------
>   >------------|
>   >
>   |Kaleb Walton/Southfield/IBM@IBMUS                                  
>   |                                                                   
>   |            |
>   |
>   >-------------------------------------------------------------------
>   >-------------------------------------------------------------------
>   >------------|
> |
> |------------>
> | Date:      |
> |------------>
> |
>   >-------------------------------------------------------------------
>   >-------------------------------------------------------------------
>   >------------|
>   >
>   |10/02/2007 05:55 PM                                                
>   |                                                                   
>   |            |
>   |
>   >-------------------------------------------------------------------
>   >-------------------------------------------------------------------
>   >------------|
> |
> |------------>
> | Subject:   |
> |------------>
> |
>   >-------------------------------------------------------------------
>   >-------------------------------------------------------------------
>   >------------|
>   >
>   |Re: Empty List's not being marshaled?                              
>   |                                                                   
>   |            |
>   |
>   >-------------------------------------------------------------------
>   >-------------------------------------------------------------------
>   >------------|
>
> On Tuesday 02 October 2007, Kaleb Walton wrote:
> > I'm using the simple server configured via Spring. When an object
> > contains an empty list (not null) my response does not return it as
> > an empty list - it just excludes the property from the response. Is
> > there any way to force it to include the property?
>
> I'd probably have to see both the schema and the soap message.   Most
> likely, the answer is no without creating a holder bean to hold the
> list.
>
> For the most part, when we see something like List<String>, we just
> create:
> <element name="foo" type="string" maxOccurs="unbounded"
> nillable="true"/>
>
> In that case, if the list is empty (or even if the list is null),
> nothing representing the list will appear on the wire.   That is how
> the JAXB spec calls for it to be done.  If you want something always
> on the wire, the schema would have to be something like:
> <element name="fooList">
> <complexType>
> <sequence>
> <element name="foo" type="string" maxOccurs="unbounded"
> nillable="true"/> </sequence>
> <complexType>
> </element>
>
> and a "FooList" class would be created to hold the List<String>.
>
> --
> J. Daniel Kulp
> Principal Engineer
> IONA
> P: 781-902-8727    C: 508-380-7194
> daniel.kulp@iona.com
> http://www.dankulp.com/blog



-- 
J. Daniel Kulp
Principal Engineer
IONA
P: 781-902-8727    C: 508-380-7194
daniel.kulp@iona.com
http://www.dankulp.com/blog

Re: Empty List's not being marshaled?

Posted by Kaleb Walton <kd...@us.ibm.com>.
Thank you!

Do you know why that is the case? Maybe because since it's empty they
figured there shouldn't be any wasted space in the XML doc?

It's a pain for my consumers to have to check for the existence of a
variable before trying to parse it out - not the end of the world but it
adds somewhat redundant code.


Regards,
Kaleb


|------------>
| From:      |
|------------>
  >--------------------------------------------------------------------------------------------------------------------------------------------------|
  |Daniel Kulp <dk...@apache.org>                                                                                                                    |
  >--------------------------------------------------------------------------------------------------------------------------------------------------|
|------------>
| To:        |
|------------>
  >--------------------------------------------------------------------------------------------------------------------------------------------------|
  |cxf-user@incubator.apache.org                                                                                                                     |
  >--------------------------------------------------------------------------------------------------------------------------------------------------|
|------------>
| Cc:        |
|------------>
  >--------------------------------------------------------------------------------------------------------------------------------------------------|
  |Kaleb Walton/Southfield/IBM@IBMUS                                                                                                                 |
  >--------------------------------------------------------------------------------------------------------------------------------------------------|
|------------>
| Date:      |
|------------>
  >--------------------------------------------------------------------------------------------------------------------------------------------------|
  |10/02/2007 05:55 PM                                                                                                                               |
  >--------------------------------------------------------------------------------------------------------------------------------------------------|
|------------>
| Subject:   |
|------------>
  >--------------------------------------------------------------------------------------------------------------------------------------------------|
  |Re: Empty List's not being marshaled?                                                                                                             |
  >--------------------------------------------------------------------------------------------------------------------------------------------------|





On Tuesday 02 October 2007, Kaleb Walton wrote:
> I'm using the simple server configured via Spring. When an object
> contains an empty list (not null) my response does not return it as an
> empty list - it just excludes the property from the response. Is there
> any way to force it to include the property?

I'd probably have to see both the schema and the soap message.   Most
likely, the answer is no without creating a holder bean to hold the
list.

For the most part, when we see something like List<String>, we just
create:
<element name="foo" type="string" maxOccurs="unbounded" nillable="true"/>

In that case, if the list is empty (or even if the list is null), nothing
representing the list will appear on the wire.   That is how the JAXB
spec calls for it to be done.  If you want something always on the wire,
the schema would have to be something like:
<element name="fooList">
<complexType>
<sequence>
<element name="foo" type="string" maxOccurs="unbounded" nillable="true"/>
</sequence>
<complexType>
</element>

and a "FooList" class would be created to hold the List<String>.

--
J. Daniel Kulp
Principal Engineer
IONA
P: 781-902-8727    C: 508-380-7194
daniel.kulp@iona.com
http://www.dankulp.com/blog

Re: Empty List's not being marshaled?

Posted by Daniel Kulp <dk...@apache.org>.
On Tuesday 02 October 2007, Kaleb Walton wrote:
> I'm using the simple server configured via Spring. When an object
> contains an empty list (not null) my response does not return it as an
> empty list - it just excludes the property from the response. Is there
> any way to force it to include the property?

I'd probably have to see both the schema and the soap message.   Most 
likely, the answer is no without creating a holder bean to hold the 
list.  

For the most part, when we see something like List<String>, we just 
create:
<element name="foo" type="string" maxOccurs="unbounded" nillable="true"/>

In that case, if the list is empty (or even if the list is null), nothing 
representing the list will appear on the wire.   That is how the JAXB 
spec calls for it to be done.  If you want something always on the wire, 
the schema would have to be something like:
<element name="fooList">
<complexType>
<sequence>
<element name="foo" type="string" maxOccurs="unbounded" nillable="true"/>
</sequence>
<complexType>
</element>

and a "FooList" class would be created to hold the List<String>.

-- 
J. Daniel Kulp
Principal Engineer
IONA
P: 781-902-8727    C: 508-380-7194
daniel.kulp@iona.com
http://www.dankulp.com/blog