On Monday, October 24, 2011 7:24:30 PM KARR, DAVID wrote:
> > -----Original Message-----
> > From: James Carr [mailto:[email protected]]
> > Sent: Monday, October 24, 2011 12:00 PM
> > To: [email protected]
> > Subject: JAXBElement<?> in generated java classes
> > 
> > Hi,
> > 
> > We've been using wsdl2java to generate our java classes for a
> > wsdl-first webservice called by salesforce and one annoyance is that
> > all the class members are of type JAXBElement<String>. Is there
> > someway to override this behavior and make them the generic type of
> > the JAXBElement? I'd like to use these as simple properties rather
> > than calling "getCity().getValue()" all the time. :)
> 
> Typically, when I've seen JAXBElement<whatever> types produced, it's due to
> a suboptimal schema definition.  Specifically, if you're using anonymous
> types.

Well, the other place they are generated is if you have elements with BOTH 
minOccurs=0 and nillable=true.   Again, kind of sub-optimal schema.   The main 
reason is that JAXB needs to distinguish which of those you need.   In 
minOccurs=0 case, the JAXBElement itself would be null.   In the nillable 
case, the JAXBElement would not be null, but it's value would be.   

If the schema is EITHER minOccurs=0 OR nillable=true, it can just generate the 
type and if null, selects the right thing to do.

You could likely write an XJC plugin that would convert the JAXBElements to 
their pure type.   I thought jaxb-commons had one, but it apparently doesn't.


-- 
Daniel Kulp
[email protected]
http://dankulp.com/blog
Talend - http://www.talend.com

Reply via email to