无法使用捆绑的Jaxb为Intellij生成Java代码

时间:2016-08-29 17:16:30

标签: java xml intellij-idea xsd jaxb

我必须使用XSD验证修改项目。我有一个XML,我通过Intellij将其转换为XSD,然后使用JAXB工具生成相关代码。一切都很好。

但是对于项目需求,我必须修改XML的整个结构,我做到了。我也生成了XSD。但是,当我尝试通过jaxb工具生成Java代码时,这是不可能的。

当我点击这个jaxb工具时,它只生成了另一个XSD。

如何再次生成代码?

谢谢!

有我的XSD。

 <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="PurgeConfigurationRacine" type="PurgeConfigurationRacineType"/>
    <xs:complexType name="BusinessBaseType">
    <xs:sequence>
      <xs:element type="ArchiveDataOperationType" name="ArchiveDataOperation"/>
      <xs:element type="PurgeDataOperationType" name="PurgeDataOperation"/>
      <xs:element type="DeleteArchivedDataOperationType" name="DeleteArchivedDataOperation"/>
    </xs:sequence>
    <xs:attribute type="xs:string" name="dataSourceRef"/>
  </xs:complexType>
  <xs:complexType name="SqlQueryType">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute type="xs:string" name="name" use="optional"/>
        <xs:attribute type="xs:string" name="step" use="optional"/>
        <xs:attribute type="xs:string" name="multi" use="optional"/>
        <xs:attribute type="xs:string" name="param" use="optional"/>
        <xs:attribute type="xs:string" name="value" use="optional"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="ArchiveDataOperationType">
    <xs:sequence>
      <xs:element type="SqlQueryType" name="SqlQuery" maxOccurs="unbounded" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="PurgeDataOperationType">
    <xs:sequence>
      <xs:element type="SqlQueryType" name="SqlQuery" maxOccurs="unbounded" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="PurgeConfigurationRacineType">
    <xs:sequence>
      <xs:element type="BusinessBaseType" name="BusinessBase"/>
      <xs:element type="DataBaseType" name="DataBase"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="DeleteArchivedDataOperationType">
    <xs:sequence>
      <xs:element type="SqlQueryType" name="SqlQuery" maxOccurs="unbounded" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="DataBaseType">
    <xs:sequence>
      <xs:element type="ArchiveDataOperationType" name="ArchiveDataOperation"/>
      <xs:element type="PurgeDataOperationType" name="PurgeDataOperation"/>
    </xs:sequence>
    <xs:attribute type="xs:string" name="dataSourceRef"/>
  </xs:complexType>
</xs:schema>

1 个答案:

答案 0 :(得分:4)

您面临的问题是一个已知问题,这是因为您有一个名为value的属性,这是一个受保护的名称,因此您需要指定xjc它必须使用不同的名称,可以通过在XSD文件中添加一些元信息来完成下一步:

<xs:attribute type="xs:string" name="value" use="optional">
    <xs:annotation>
        <xs:appinfo>
            <jaxb:property name="sqlQueryTypeValue"/>
        </xs:appinfo>
    </xs:annotation>
</xs:attribute>

您还需要添加相应的名称空间声明和要使用的jaxb版本,例如:

<xs:schema ... xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.1">

有关how to customize JAXB binding

的更多信息