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
