jt.vervliet
jt.vervliet

Reputation: 171

Can't generate Java code with the bundled Jaxb for Intellij

I have to modify a project using XSD validation. I had got an XML, I transformed it to XSD via Intellij and then generated the associated code with the JAXB tool. All was fine.

But for the project needs, I had to modify the entire structure of my XML, I did it. I generate the XSD as well. But, When I tried to generate the Java code via the jaxb tools, it was impossible.

When I click in this jaxb tool, it just generated another XSD.

How can I do to generate, once again, the code ?

Thank you !

There is my 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>

Upvotes: 2

Views: 2126

Answers (1)

Nicolas Filotto
Nicolas Filotto

Reputation: 45005

The problem that you are facing is a known issue, it is due to the fact that you have an attribute called value which is a protected name, such that you need to specify to xjc that it has to use a different name, it can be done by adding some meta information in your XSD file as next:

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

You will also need to add the corresponding namespace declaration and the jaxb version to use, for example:

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

More information about how to customize JAXB binding

Upvotes: 4

Related Questions