如何从实现可序列化的 XSD 生成类?

2022-09-03 18:22:17

我需要从包中的 XML 架构 (XSD) 生成许多类(.jar)。如何将这些类配置为可序列化?

(我正在使用Eclipse和JAX-B)


答案 1

如果您使用的是 XJC,我建议您阅读此参考:JavaTM XML 绑定的体系结构:JAXB RI 供应商扩展定制

您必须在架构附加命名空间定义中添加 xjc 附加标记:

<xs:schema 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:extensionBindingPrefixes="xjc"
           jaxb:version="1.0">

然后,在以下位置包含一个节点:<xjc:serializable><jaxb:globalBindings>

<xs:annotation>
   <xs:appinfo>
      <jaxb:globalBindings generateIsSetMethod="true">
          <xjc:serializable uid="12343"/>
      </jaxb:globalBindings>
   </xs:appinfo>
</xs:annotation>

这将导致所有具体类都实现可序列化接口。此外,还可以定义生成的类的 UUID 值(这是一个可选属性)。


答案 2

我发现

<schema
  xmlns="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:extensionBindingPrefixes="xjc"
  jaxb:version="1.0"  
  >

  <!-- FORCE ALL CLASSES IMPLEMENTS SERIALIZABLE -->
  <annotation>
    <appinfo>
      <jaxb:globalBindings generateIsSetMethod="true">
        <xjc:serializable uid="1"/>
      </jaxb:globalBindings>
    </appinfo>
  </annotation>

   ....

</schema>