JAXB equals and Hashcode: gives error

13,451

Here is a configuration set that we have working. I believe there are a number of elements that need to "line up" (so to speak) otherwise you get the error indicated.

General Dependency:-

    <dependency>
        <groupId>org.jvnet.jaxb2_commons</groupId>
        <artifactId>jaxb2-basics-runtime</artifactId>
        <version>0.6.4</version>
    </dependency>

maven-jaxb2-plugin:-

        <plugin>
            <groupId>org.jvnet.jaxb2.maven2</groupId>
            <artifactId>maven-jaxb2-plugin</artifactId>
            <version>0.8.3</version>
            <executions>
                <execution>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <extension>true</extension>
                <generatePackage>you.package.etc</generatePackage>
                <args>
                    <arg>-XtoString</arg>
                    <arg>-Xequals</arg>
                    <arg>-XhashCode</arg>
                    <arg>-Xinheritance</arg>
                    <arg>-Xcopyable</arg>
                    <arg>-XenumValue</arg>
                </args>
                <plugins>
                    <plugin>
                        <groupId>org.jvnet.jaxb2_commons</groupId>
                        <artifactId>jaxb2-basics</artifactId>
                        <version>0.6.4</version>
                    </plugin>
                </plugins>
            </configuration>
        </plugin>

Bindings Extract:-

<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:inheritance="http://jaxb2-commons.dev.java.net/basic/inheritance"
    jaxb:extensionBindingPrefixes="inheritance"
    jaxb:version="2.1">

......

<jaxb:bindings schemaLocation="yourschema.xsd" node="/xs:schema">
    <jaxb:bindings node="//xs:element[@name='element-you-want-to-have-interface']">
        <jaxb:class />
        <inheritance:implements>your.interface</inheritance:implements>
    </jaxb:bindings>
</jaxb:bindings>

......

</jaxb:bindings>
Share:
13,451
mehmet
Author by

mehmet

Java and JS developer for the past 20+ years.

Updated on June 04, 2022

Comments

  • mehmet
    mehmet almost 2 years

    I'm trying to get my pom.xml to generate the hashCode() and equals methods() on my JAXB objects.

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <dependencies>
        <dependency>
            <groupId>org.jvnet.jaxb2_commons</groupId>
            <artifactId>jaxb2-commons-lang</artifactId>
            <version>2.3</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.jvnet.jaxb2.maven2</groupId>
                <artifactId>maven-jaxb2-plugin</artifactId>
                <version>0.8.3</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <extension>true</extension>
                    <args>
                        <arg>-XtoString</arg>
                        <arg>-Xequals</arg>
                        <arg>-XhashCode</arg>
                    </args>
                    <plugins>
                        <plugin>
                            <groupId>org.jvnet.jaxb2_commons</groupId>
                            <artifactId>jaxb2-basics</artifactId>
                            <version>0.6.2</version>
                        </plugin>
                    </plugins>
                </configuration>
            </plugin>
    
        </plugins>
    </build>
    

    This gives the following errors though...

    package org.jvnet.jaxb2_commons.lang does not exist
    package org.jvnet.jaxb2_commons.locator does not exist
    package org.jvnet.jaxb2_commons.locator.util does not exist
    cannot find symbol symbol: class Equals
    cannot find symbol symbol: class HashCode
    cannot find symbol symbol: class ToString
    cannot find symbol symbol  : class ObjectLocator
    cannot find symbol symbol  : class ToStringStrategy
    cannot find symbol symbol  : class HashCodeStrategy
    

    I've googled about, and I've found a post about adding..

    <dependency>
        <groupId>org.jvnet.jaxb2_commons</groupId>
        <artifactId>runtime</artifactId>
        <version>0.4.1</version>
    </dependency>
    <dependency>
        <groupId>org.jvnet.jaxb2_commons</groupId>
        <artifactId>testing</artifactId>
        <version>0.4.1</version>
        <scope>test</scope>
    </dependency>
    

    But this doesn't help.

    Can anyone help me out please!

  • Deanna Gelbart
    Deanna Gelbart over 7 years
    If you came here because of build errors with the Intuit Quickbooks SDK like I did: You only need to add the dependency. Intuit already ran the plugin for you.
  • Ian W
    Ian W almost 4 years
    DO NOT follow @FrVaBe 's link to: confluence[dot]highsource[dot]org; no longer a legit site.
  • FrVaBe
    FrVaBe almost 4 years
    @IanW Big thanks for the hint. I deleted the comment with the (now) shit link!
  • koppor
    koppor almost 4 years
    The plugin is hosted there: github.com/highsource/jaxb2-basics