2014-09-30 10 views
6

Ho un client webservice di sapone autogenerato (utilizzando cxf) e alcuni elementi sono contrassegnati come facoltativi.Come impedire la generazione di elementi xml 'nil' nel client webservice soap?

Se non metto questi elementi, la richiesta XML inviare al webservice ha una sacco di elementi come segue:

<PayText xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> 
<Name xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> 

presentate generato se il wsdl contiene:

minOccurs="0" nillable="true" 

Come può Previene la generazione di questi elementi nil? Probabilmente il webservice stesso non ha bisogno di queste informazioni, come quando uso soapUI e invio le richieste di puro xml che tolgono gli elementi nil, la richiesta funziona ancora.

mio file di collegamento:

<jaxb:globalBindings generateElementProperty="false" /> 

Così, come posso evitare che vengano generati durante la trasmissione?

+0

Possibile duplicato (almeno una domanda pertinente con risposta): http://stackoverflow.com/questions/5897785/jaxb-marshaller-always-writes-xsinil-even-when-xmlelementrequired-false-nil – Davio

+1

Non proprio. Non ho né il controllo di 'wsdl' (sono solo il client), nè delle classi autogenerate (dato che devono essere rigenerate ogni volta che viene eseguito un aggiornamento di wsdl). – membersound

+0

Beh, in questo caso probabilmente sei sfortunato a causa del 'nillable = true' che è presente nel WSDL. – Davio

risposta

1

Se un elemento è minOccurs="0" e nillable="true" quindi il tipo di proprietà generato sarà un JAXBElement, qualcosa come JAXBElement<String>. Quando quella proprietà è null, verrà esclusa dall'XML marshalling (null corrisponde a minOccurs="0"). Per ottenere xsi:nil="true" è necessario disporre di un'istanza di JAXBElement con nil impostata su true.

+0

Quindi è dovuto al mio ''? Voglio evitare di lavorare con 'JAXBElement', ma ho la proprietà direttamente, è per questo che lavoro con' generateElementProperty = false'. E 'quindi impossibile rimuovere gli elementi nil dal xml marshalled, in quanto sono generati come conseguenza della proprietà ?? – membersound

+1

Questo è uno dei casi in cui 'JAXBElement' è utile. Senza di essa la proprietà verrà annotata con '@XmlElement (nillable = true)' causerà il comportamento che stai vedendo. Perché non vuoi usare 'JAXBElement'? –

+2

Impedisco l'utilizzo di jaxbelement per avere una proprietà di elementi in meno da percorrere quando si accede alle proprietà degli elementi generati automaticamente. Potrebbe essere generalmente detto se JAXBElement debba essere usato in un progetto o no? – membersound

Problemi correlati