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 方法。
我在为导入的 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 方法。