xmlbeans-maven-plugin not generating getters for Lists

1.6k Views Asked by At

I'm currently trying to build a legacy project which has been migrated from Ant to Maven. This project uses the xmlbeans-maven-plugin to build java classes from .xsd source files. Everything works fine until a get...List() method gets called. All List-getters seem to be missing. All the information I could find points to a Java version being used that does not support Lists. The solution that worked for most people was changing the javaSource tag in the plugin configuration to 1.5. This did not solve my problem.

The relevant part of my pom.xml currently looks like this:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>xmlbeans-maven-plugin</artifactId>
    <version>2.3.3</version>
    <executions>
        <execution>
            <phase>generate-sources</phase>
            <goals>
                <goal>xmlbeans</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <javaSource>1.8</javaSource>
        <schemaDirectory>src/main/xsd</schemaDirectory>
    </configuration>
</plugin>

Another stackoverflow thread (Maven2:List return type methods not getting generated from .xsd files while using xmlbeans plugin), from 2011 mind you, suggests to set the Java version to 1.5 instead. This gives me another error:

Failed to execute goal org.codehaus.mojo:xmlbeans-maven-plugin:2.3.3:xmlbeans (default) on project ...: XmlBeans compile failed:
 xml ErrorLoading schema file ...
 xml ErrorLoading schema file ...
 xml ErrorLoading schema file ...
 xml ErrorLoading schema file ...
 xml ErrorLoading schema file ...

The solution for this problem I found here tells me this is a problem with Java 11 and that I should set the Java version to 1.8.

Here's a snippet of one of the .xsd files:

<xs:element name="DbcFile" minOccurs="0" maxOccurs="unbounded">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="name" type="xs:string" />
      <xs:element name="path" type="xs:string" />
    </xs:sequence>
  </xs:complexType>
</xs:element>

This should generate a method called getDbcFileList(). However, as you can see from this error message, it does not do that:

... cannot find symbol
  symbol:   method getDbcFileList()

It does generate getDbcFileArray(). I have tried a lot of combinations of changing Java versions, removing the build folder every time to get a clean build, you name it. I'm honestly out of ideas.

I'm using Maven 3.6.3 and OpenJDK 13.0.2+8_2. I'm running maven commands from IntelliJ 2020.1. The only thing I haven't tried is downgrading my JDK, but I feel like that won't make a difference.

2

There are 2 best solutions below

0
On BEST ANSWER

I solved it. The solution was to downgrade to JDK 1.8, for some reason.

0
On

I got this error when upgrading from JDK 1.8 to JDK 11. The xmlbeans-maven-plugin is old but if you have to stick with it then the solution is to add following attributes to <configuration> section for the plugin in pom.xml:

<noJavac>true</noJavac>
<javaSource>1.6</javaSource>

The author was close to solution but <javaSource> attribute alone is not enough. Setting <noJavac> prevents xmlbeans from calling compilation with argument "-source" pointing to possibly no longer supported Java versions, in my case 1.4.

I see the OP linked the thread where I found solution, but back then the part about javac was missing: https://github.com/ethercis/openehr-java-libs/issues/1#issuecomment-880253566.