从 xsd 生成 jaxb 对象时如何使用 class 自定义来解决冲突
How to use a class customization to resolve conflict when generating jaxb object from xsd
当我 运行 在 xsd 之后执行 xjc -d src/ -p com.test IFC2X3.xsd
命令时,它给出了冲突。
....
<xs:element name="IfcCondenserTypeEnum" nillable="true">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="ifc:IfcCondenserTypeEnum">
<xs:attributeGroup ref="ex:instanceAttributes">
</xs:attributeGroup>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:simpleType name="IfcCondenserTypeEnum">
<xs:restriction base="xs:string">
<xs:enumeration value="watercooledshelltube">
</xs:enumeration>
<xs:enumeration value="watercooledshellcoil">
</xs:enumeration>
<xs:enumeration value="watercooledtubeintube">
</xs:enumeration>
<xs:enumeration value="watercooledbrazedplate">
</xs:enumeration>
<xs:enumeration value="aircooled">
</xs:enumeration>
<xs:enumeration value="evaporativecooled">
</xs:enumeration>
<xs:enumeration value="userdefined">
</xs:enumeration>
<xs:enumeration value="notdefined">
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
....
错误:
parsing a schema...
compiling a schema...
[ERROR] A class/interface with the same name "com.test.IfcCondenserTypeEnum" is already in use. Use a class customization to resolve this conflict.
line 14912 of file:/media/isuru/Projects/mitrai/bim_exchange/ifc_classes_v2x3/IFC2X3.xsd
[ERROR] (Relevant to above error) another "IfcCondenserTypeEnum" is generated from here.
line 14902 of file:/media/isuru/Projects/mitrai/bim_exchange/ifc_classes_v2x3/IFC2X3.xsd
我发现了一些与此相关的问题,但没有回答这个问题。我该如何按照建议解决此问题 Use a class customization
使用下面的绑定
<bindings version="2.0" xmlns="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" xmlns:annox="http://annox.dev.java.net"
xmlns:namespace="http://jaxb2-commons.dev.java.net/namespace-prefix">
<bindings schemaLocation="../schema.xsd">
<bindings node="//xs:schema//xs:element[@name='IfcCondenserTypeEnum']">
<class name="CondenserType" />
</bindings>
</bindings>
</bindings>
您可以使用 -autoNameResolution
例如,您可以调用wsdl2java -frontend jaxws21 -impl -server -d ../java -autoNameResolution -p com.yourClass https://webservice.xxxx.com.tr/Sms.asmx?wsdl
当我 运行 在 xsd 之后执行 xjc -d src/ -p com.test IFC2X3.xsd
命令时,它给出了冲突。
....
<xs:element name="IfcCondenserTypeEnum" nillable="true">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="ifc:IfcCondenserTypeEnum">
<xs:attributeGroup ref="ex:instanceAttributes">
</xs:attributeGroup>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:simpleType name="IfcCondenserTypeEnum">
<xs:restriction base="xs:string">
<xs:enumeration value="watercooledshelltube">
</xs:enumeration>
<xs:enumeration value="watercooledshellcoil">
</xs:enumeration>
<xs:enumeration value="watercooledtubeintube">
</xs:enumeration>
<xs:enumeration value="watercooledbrazedplate">
</xs:enumeration>
<xs:enumeration value="aircooled">
</xs:enumeration>
<xs:enumeration value="evaporativecooled">
</xs:enumeration>
<xs:enumeration value="userdefined">
</xs:enumeration>
<xs:enumeration value="notdefined">
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
....
错误:
parsing a schema...
compiling a schema...
[ERROR] A class/interface with the same name "com.test.IfcCondenserTypeEnum" is already in use. Use a class customization to resolve this conflict.
line 14912 of file:/media/isuru/Projects/mitrai/bim_exchange/ifc_classes_v2x3/IFC2X3.xsd
[ERROR] (Relevant to above error) another "IfcCondenserTypeEnum" is generated from here.
line 14902 of file:/media/isuru/Projects/mitrai/bim_exchange/ifc_classes_v2x3/IFC2X3.xsd
我发现了一些与此相关的问题,但没有回答这个问题。我该如何按照建议解决此问题 Use a class customization
使用下面的绑定
<bindings version="2.0" xmlns="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" xmlns:annox="http://annox.dev.java.net"
xmlns:namespace="http://jaxb2-commons.dev.java.net/namespace-prefix">
<bindings schemaLocation="../schema.xsd">
<bindings node="//xs:schema//xs:element[@name='IfcCondenserTypeEnum']">
<class name="CondenserType" />
</bindings>
</bindings>
</bindings>
您可以使用 -autoNameResolution
例如,您可以调用wsdl2java -frontend jaxws21 -impl -server -d ../java -autoNameResolution -p com.yourClass https://webservice.xxxx.com.tr/Sms.asmx?wsdl