You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by Arthur van Dorp <ar...@gmx.net> on 2012/04/18 11:37:35 UTC

How to not add nil-elements if minOccurs="0"

Hi everybody

Using CXF 2.5.2 with JAXB for generating a client for an AXIS2 webservice:

The wsdl has many elements defined with minOccurs="0" and nillable="true". CXF sends requests for such elements like this:
<ps1:myElement xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>

Completely reasonable. Strangely enough the webservice doesn't like that. When I remove all nil elements (they have minOccurs="0" after all) all works well. Is there a way to force CXF/JAXB to not send elements with minOccurs="0" which would otherwise be sent as nil-elements? This would also save quite a bit on messages size. I've found many posts concerning nil-elements and minOccurs, but none describing this specific problem.

Thanks and regards

Arthur


-- 
NEU: FreePhone 3-fach-Flat mit kostenlosem Smartphone!                                  
Jetzt informieren: http://mobile.1und1.de/?ac=OM.PW.PW003K20328T7073a

Re: How to not add nil-elements if minOccurs="0"

Posted by Arthur van Dorp <ar...@gmx.net>.
Hi Daniel

Thanks! Currently the web service doesn't have any performance problems 
so I leave it at that.

Regards

Arthur

Daniel Kulp wrote:
>
> If the element is both minOccurs="0" and nillable=true, JAXB usually will
> generate the property as a JAXBElement<Type>  instead of just Type.   In that
> case, if you specify the element, but it's value is null, you get the
> nil=true.  If you leave the full property as null, it should be skipped.
>
> Dan
>
> On Wednesday, April 18, 2012 01:08:15 PM Arthur van Dorp wrote:
>> Hello all
>>
>> I've figured out what the problem with the AXIS2 server is: The service
>> isn't using proper beans. There are two pairs of getters/setters which
>> map to the same Java field. So you have my AXIS2 client send
>>
>> <el1>x<el1>
>>
>> and my CXF client send
>>
>> <el1>x<el1>
>> <el2 xsi:nil="true"
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
>>
>> The second line overwriting the field both setE1 and setE2 map to on
>> deserialization...
>>
>> So it's neither an AXIS2 nor a CFX problem but a sloppily programmed
>> service...
>>
>> I'd still be interested in a way to remove all those nil-elements as the
>> requests would be much more readable.
>>
>> Kind regards
>>
>> Arthur
>>
>>> Datum: Wed, 18 Apr 2012 11:37:35 +0200
>>> Von: "Arthur van Dorp"<ar...@gmx.net>
>>> Betreff: How to not add nil-elements if minOccurs="0"
>>>
>>> Hi everybody
>>>
>>> Using CXF 2.5.2 with JAXB for generating a client for an AXIS2
>>> webservice:
>>>
>>> The wsdl has many elements defined with minOccurs="0" and
>>> nillable="true". CXF sends requests for such elements like this:
>>> <ps1:myElement xsi:nil="true"
>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
>>>
>>> Completely reasonable. Strangely enough the webservice doesn't like
>>> that.
>>> When I remove all nil elements (they have minOccurs="0" after all) all
>>> works well. Is there a way to force CXF/JAXB to not send elements with
>>> minOccurs="0" which would otherwise be sent as nil-elements? This would
>>> also save quite a bit on messages size. I've found many posts
>>> concerning nil-elements and minOccurs, but none describing this
>>> specific problem.
>>>
>>> Thanks and regards
>>>
>>> Arthur

Re: How to not add nil-elements if minOccurs="0"

Posted by Daniel Kulp <dk...@apache.org>.
If the element is both minOccurs="0" and nillable=true, JAXB usually will 
generate the property as a JAXBElement<Type> instead of just Type.   In that 
case, if you specify the element, but it's value is null, you get the 
nil=true.  If you leave the full property as null, it should be skipped.  

Dan

On Wednesday, April 18, 2012 01:08:15 PM Arthur van Dorp wrote:
> Hello all
> 
> I've figured out what the problem with the AXIS2 server is: The service
> isn't using proper beans. There are two pairs of getters/setters which
> map to the same Java field. So you have my AXIS2 client send
> 
> <el1>x<el1>
> 
> and my CXF client send
> 
> <el1>x<el1>
> <el2 xsi:nil="true"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
> 
> The second line overwriting the field both setE1 and setE2 map to on
> deserialization...
> 
> So it's neither an AXIS2 nor a CFX problem but a sloppily programmed
> service...
> 
> I'd still be interested in a way to remove all those nil-elements as the
> requests would be much more readable.
> 
> Kind regards
> 
> Arthur
> 
> > Datum: Wed, 18 Apr 2012 11:37:35 +0200
> > Von: "Arthur van Dorp" <ar...@gmx.net>
> > Betreff: How to not add nil-elements if minOccurs="0"
> > 
> > Hi everybody
> > 
> > Using CXF 2.5.2 with JAXB for generating a client for an AXIS2
> > webservice:
> > 
> > The wsdl has many elements defined with minOccurs="0" and
> > nillable="true". CXF sends requests for such elements like this:
> > <ps1:myElement xsi:nil="true"
> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
> > 
> > Completely reasonable. Strangely enough the webservice doesn't like
> > that.
> > When I remove all nil elements (they have minOccurs="0" after all) all
> > works well. Is there a way to force CXF/JAXB to not send elements with
> > minOccurs="0" which would otherwise be sent as nil-elements? This would
> > also save quite a bit on messages size. I've found many posts
> > concerning nil-elements and minOccurs, but none describing this
> > specific problem.
> > 
> > Thanks and regards
> > 
> > Arthur
-- 
Daniel Kulp
dkulp@apache.org - http://dankulp.com/blog
Talend Community Coder - http://coders.talend.com


Re: How to not add nil-elements if minOccurs="0"

Posted by Arthur van Dorp <ar...@gmx.net>.
Hello all

I've figured out what the problem with the AXIS2 server is: The service isn't using proper beans. There are two pairs of getters/setters which map to the same Java field. So you have my AXIS2 client send

<el1>x<el1>

and my CXF client send

<el1>x<el1>
<el2 xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>

The second line overwriting the field both setE1 and setE2 map to on deserialization...

So it's neither an AXIS2 nor a CFX problem but a sloppily programmed service...

I'd still be interested in a way to remove all those nil-elements as the requests would be much more readable.

Kind regards

Arthur

> Datum: Wed, 18 Apr 2012 11:37:35 +0200
> Von: "Arthur van Dorp" <ar...@gmx.net>
> Betreff: How to not add nil-elements if minOccurs="0"

> Hi everybody
> 
> Using CXF 2.5.2 with JAXB for generating a client for an AXIS2 webservice:
> 
> The wsdl has many elements defined with minOccurs="0" and nillable="true".
> CXF sends requests for such elements like this:
> <ps1:myElement xsi:nil="true"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
> 
> Completely reasonable. Strangely enough the webservice doesn't like that.
> When I remove all nil elements (they have minOccurs="0" after all) all
> works well. Is there a way to force CXF/JAXB to not send elements with
> minOccurs="0" which would otherwise be sent as nil-elements? This would also save
> quite a bit on messages size. I've found many posts concerning nil-elements
> and minOccurs, but none describing this specific problem.
> 
> Thanks and regards
> 
> Arthur
> 
> 
> -- 
> NEU: FreePhone 3-fach-Flat mit kostenlosem Smartphone!                    
>              
> Jetzt informieren: http://mobile.1und1.de/?ac=OM.PW.PW003K20328T7073a

-- 
NEU: FreePhone 3-fach-Flat mit kostenlosem Smartphone!                                  
Jetzt informieren: http://mobile.1und1.de/?ac=OM.PW.PW003K20328T7073a