2014-12-15 28 views
10

Sto usando ant wsimport per generare lo stub del client da wsdls. Inoltre, mi piacerebbe generare classi client che implementa Serializable. Vorrei generare un diverso serialVersionUID per ogni classe. Ho provato con il file di bind che è stato mostrato di seguito. Ma sta generando lo stesso serialVersionUID per tutte le classi. C'è un modo per dare il mio serialVersionUID a ciascuna classe?Generazione di ID serializzabile univoco per ciascuna delle classi generate in JAXB

<wsimport xendorsed="true" binding="binding.xml" debug="true" keep="true" 
verbose="false" sourcedestdir="${generated}" wsdl="${src}${wsdl.file}" 
wsdlLocation="${wsdl.file}"> 
</wsimport> 

configurazione vincolante

<bindings xmlns="http://java.sun.com/xml/ns/jaxb" version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <globalBindings> 
     <serializable uid="1" />   
    </globalBindings>  
</bindings> 
+0

Waitaminute ... Se si implementa 'Serializable', si sta vincolando per un contratto a vita; generazione di UUID _random_? – fge

+0

@fge L'OP non dice che vuole casuale 'uid's, l'OP vuole diversi' uid's per classi diverse (cioè non sempre lo stesso/'1'). Teoricamente è possibile generare un 'uid' basato sul contenuto della classe. Contenuti diversi: diversi 'uid's. Quindi la domanda ha senso per me. – lexicore

+0

'' la personalizzazione può avvenire solo all'interno di '' [vedi qui] (https://jaxb.java.net/jaxb20-ea/docs/vendorCustomizations. html). In ogni caso è possibile aggiungere un lavoro usando l'associazione per ogni elemento generato. – Xstian

risposta

1

Questo è il file di legame che usiamo, che fa il trucco per noi.

<xs:schema elementFormDefault="qualified" version="1.0" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" jaxb:version="2.0" 
jaxb:extensionBindingPrefixes="xjc"> 
<xs:annotation> 
    <xs:appinfo> 
     <jaxb:globalBindings> 
      <xjc:serializable /> 
     </jaxb:globalBindings> 
    </xs:appinfo> 
</xs:annotation> 

+0

Questo non è uno schema completo ... – markthegrea

+0

No, non è uno schema completo, ma il bit pertinente da inserire nello schema. Almeno, ha fatto il trucco per inserire queste righe nel mio file WSDL. –

2

Solo per la cronaca, non c'è modo per generare un unico serialVersionUID per ogni classe generata a causa che non ha senso farlo.

Lasciatemi spiegare: A serialVersionUID rappresenta una versione della classe in un particolare momento. Se modifichi la tua classe, il tuo serialVersionUID dovrebbe cambiare. Quindi, quando il JDK deserializza oggetti della stessa classe, sa a quale versione della classe deve essere deserializzata.

Nel caso di JAXB, poiché si generano tutte le classi contemporaneamente ogni volta che non ha senso eseguire tutte le classi singolarmente. Semplicemente perché possono cambiare solo come gruppo. (A meno che non li tolga dalla cartella di destinazione ..)

Spero che abbia un po 'più senso.