Search code examples
xsdwsdlcxfcxf-codegen-pluginjaxb2-basics

CXF JAXB basics Equals/Hashcode


I have a problem generating equals and hashcode methods for my imported xsd files which are output to a separate location to my wsdl files. I currently have a .wsdl and .xsd file in the same folder. The .wsdl file imports these xsd files which have a different namespace to the wsdl file. When these xsd files are generated they do not contain equals or hashcode methods. Below is a sample of my pom/xml config and files:

<wsdlOption>
    <wsdl>
        src/main/xml/wsdl/Rule.wsdl
    </wsdl>
    <wsdlLocation>classpath:wsdl/Rule.wsdl</wsdlLocation>
    <bindingFiles>
        <bindingFile>src/main/xml/wsdl/bindings.xjb</bindingFile>
    </bindingFiles>
    <extraargs>
        <extraarg>-impl</extraarg>
        <extraarg>-verbose</extraarg>
        <extraarg>-xjc-XsimpleEquals</extraarg>
        <extraarg>-xjc-XsimpleHashCode</extraarg>
    </extraargs>
</wsdlOption>

Sample wsdl (imported Rule.xsd is not generating methods):

<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://www.ws.com/Rule/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="Rule"
targetNamespace="http://www.ws.com/Rule/">
<wsdl:types>
    <xsd:schema targetNamespace="http://http://www.ws.com/Rule/">
    </xsd:schema>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.ws.com/Rule/"
        xmlns:pref="http://www.xsd.com/Rule" xmlns:pref1="http://www.xsd.com/Common">
        <xsd:import schemaLocation="Rule.xsd"
            namespace="http://www.xsd.com/Rule">
        </xsd:import>
        <xsd:import schemaLocation="Common.xsd" namespace="http://www.xsd.com/Common"></xsd:import>
        <xsd:element name="ListGrid">
            <xsd:complexType>
                <xsd:sequence>
                    <xsd:element name="request"
                        type="pref:test" maxOccurs="1" minOccurs="1">
                    </xsd:element>
                </xsd:sequence>
            </xsd:complexType>
        </xsd:element>

I assume this is a problem with the location of the generated xsd as I can get it to work by moving this to the same parent folder as the wsdl namespace. I would like to get this to work without moving these files locations as I have a large codebase that would require a large refactor if I do this.

Any suggestions would be welcome.


Solution

  • I found a solution to this problem by adding the following to the pom.xml configuration:

    <extraarg>-p</extraarg>
    <extraarg>http://www.xsd.com/Rule=com.xsd.rule</extraarg>
    

    Even though this does not change the namespace/package location it seems to now generate the imported files equals and hashcode methods.