Подтвердить что ты не робот

Создание уникального сериализуемого идентификатора для каждого из сгенерированных классов в JAXB

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

<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>
4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

<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>