CXF JAXB 基础知识 Equals/Hashcode

CXF JAXB basics Equals/Hashcode

我在为导入的 xsd 文件生成 equals 和 hashcode 方法时遇到问题,这些文件输出到我的 wsdl 文件的单独位置。我目前在同一个文件夹中有一个 .wsdl 和 .xsd 文件。 .wsdl 文件导入这些 xsd 文件,这些文件具有与 wsdl 文件不同的命名空间。生成这些 xsd 文件时,它们不包含 equals 或 hashcode 方法。下面是我的 pom/xml 配置和文件的示例:

<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>

示例 wsdl(导入的 Rule.xsd 未生成方法):

<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>

我认为这是生成的 xsd 位置的问题,因为我可以通过将其移动到与 wsdl 名称空间相同的父文件夹来使其正常工作。我想让它在不移动这些文件位置的情况下工作,因为我有一个大型代码库,如果我这样做,需要进行大量重构。

欢迎提出任何建议。

我通过将以下内容添加到 pom.xml 配置中找到了解决此问题的方法:

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

即使这不会更改 namespace/package 位置,它现在似乎生成了导入的文件 equals 和 hashcode 方法。