2014-12-15 7 views
10

Ich benutze antwsimport, um Client-Stub aus den WSDLS zu generieren. Außerdem möchte ich Client-Klassen generieren, die Serializable implementiert. Ich möchte für jede Klasse eine andere serialVersionUID generieren. Ich versuchte es mit der Bindungsdatei, die unten gezeigt wurde. Aber seine Generierung serialVersionUID für alle Klassen. Gibt es eine Möglichkeit, meine eigene serialVersionUID jeder Klasse zu geben?Generieren einer eindeutigen serialisierbaren ID für jede der generierten Klassen in JAXB

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

Bindungskonfiguration

<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 ... Wenn Sie 'Serializable' implementieren, binden Sie sich für einen Vertrag für das Leben; Generieren von _random_ UUIDs? – fge

+0

@fge Das OP sagt nicht, dass er zufällige 'uid's will, das OP will verschiedene' uid's für verschiedene Klassen (d. H. Nicht immer das selbe/'1'). Theoretisch ist es möglich, basierend auf dem Inhalt der Klasse eine "UID" zu erzeugen. Unterschiedliche Inhalte - verschiedene 'uid's. Also macht die Frage Sinn für mich. – lexicore

+0

'' Anpassung kann nur innerhalb Ihrer '' [siehe hier] (https://jaxb.java.net/jaxb20-ea/docs/vendorCustomizations. html). Jedenfalls können Sie eine Arbeit hinzufügen, die Bindung für jedes generierte Element verwendet. – Xstian

Antwort

1

Dies ist die Bindungs ​​Datei, die wir verwenden, die den Trick für uns.

<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

Dies ist kein vollständiges Schema ... – markthegrea

+0

Nein, es ist kein vollständiges Schema, sondern das relevante Bit, das in Ihr Schema eingefügt werden soll. Zumindest hat es den Trick gemacht, diese Zeilen in meine WSDL-Datei einzufügen. –

2

Nur für das Protokoll, gibt es keine Möglichkeit, eine einzigartige serialVersionUID für jede generierte Klasse zu generieren, weil es keinen Sinn macht, so zu tun.

Lassen Sie mich erklären: Eine serialVersionUID repräsentiert eine Version Ihrer Klasse zu einem bestimmten Zeitpunkt. Wenn Sie Ihre Klasse ändern, sollte sich Ihre serialVersionUID ändern. Wenn also das JDK Objekte der gleichen Klasse deserialisiert, weiß es, zu welcher Version Ihrer Klasse es deserialisiert werden soll.

Im Fall von JAXB, da Sie alle Klassen jedes Mal auf einmal generieren, ist es nicht sinnvoll, alle Klassen einzeln zu versionieren. Einfach weil sie sich nur als Gruppe ändern können. (Es sei denn, Sie nehmen sie aus Ihrem Zielordner ..)

Ich hoffe, dass das ein bisschen mehr Sinn macht.

Verwandte Themen