2014-12-15 5 views
10

Я использую ant wsimport для создания заглушки клиента из wsdls. Кроме того, я хотел бы генерировать классы клиентов, которые реализуют Serializable. Я хотел бы генерировать разные serialVersionUID для каждого класса. Я попробовал файл привязки, который был показан ниже. Но его создание такое же serialVersionUID для всех классов. Есть ли способ, которым я могу дать свой собственный serialVersionUID для каждого класса?Создание уникального идентификатора serializable для каждого из сгенерированных классов в JAXB

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

связывание конфигурации

<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 ... Если вы реализуете 'Serializable', вы обязуетесь выполнять контракт на всю жизнь; генерирование _random_ UUIDs? – fge

+0

@fge OP не говорит, что ему нужны случайные 'uid', OP хочет разные 'uid' для разных классов (т. Е. Не всегда одинаковые/'1'). Теоретически можно создать 'uid' на основе содержимого класса. Различное содержание - разные 'uid's. Поэтому вопрос имеет смысл для меня. – lexicore

+0

'' настройка может возникать только внутри вашего '' [см. Здесь] (https://jaxb.java.net/jaxb20-ea/docs/vendorCustomizations. HTML). В любом случае вы можете добавить работу, используя привязку для каждого созданного элемента. – Xstian

ответ

1

Это переплета файл, который мы используем, что делает трюк для нас.

<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

Это не полная схема ... – markthegrea

+0

Нет, это не полная схема, но соответствующий бит для вставки в вашу схему. По крайней мере, он сделал трюк, чтобы вставить эти строки в мой файл WSDL. –

2

Просто для записи, нет никакого способа, чтобы создать уникальный serialVersionUID для каждого порожденного класса, потому что это не имеет смысла делать так.

Позвольте мне объяснить: A serialVersionUID представляет собой версию вашего класса в определенный момент времени. Если вы измените свой класс, ваш serialVersionUID должен измениться. Итак, когда JDK десериализует объекты того же класса, он знает, к какой версии вашего класса следует десериализовать его.

В случае JAXB, поскольку вы генерируете все свои классы одновременно каждый раз, когда не имеет смысла выпускать все классы отдельно. Просто потому, что они могут меняться только как группа. (Если вы не вынесете их из своей целевой папки ..)

Надеюсь, что это немного лучше.