xjc/wsimport - JAXB 绑定被忽略
xjc/wsimport - JAXB binding ignored
wsimport 和 xjc 命令(均作为 Java JDK 的一部分下载)在目标 wsdl/xsds 放置在某些特定路径下时忽略提供的 jaxb 绑定文件。
要重现此行为,可以使用路径 C:\a。此目录包含以下 XSD 个文件:
nm.xsd:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:include schemaLocation="name.xsd"/>
<xs:annotation>
<xs:documentation xml:lang="en">Annotation</xs:documentation>
</xs:annotation>
<xs:element name="name" type="Name"/>
<xs:complexType name="FName">
<xs:sequence>
<xs:element name="value" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="LName">
<xs:sequence>
<xs:element name="value" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
name.xsd:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="Name">
<xs:sequence>
<xs:element name="FirstName" type="FName"/>
<xs:element name="LastName" type="LName"/>
<xs:element name="Date" type="xs:date"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
bindings.xjb:
<?xml version="1.0" encoding="UTF-8"?>
<jxb:bindings version="1.0" xmlns:jxb="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">
<jxb:globalBindings generateElementProperty="false" collectionType="indexed">
<jxb:javaType name="java.util.Date" xmlType="xs:date" parseMethod="com.company.Converter.parseDate" printMethod="com.company.Converter.printDate"/>
</jxb:globalBindings>
</jxb:bindings>
从 C:\a 使用以下命令生成 JAXB 工件:
xjc -b bindings.xjb nm.xsd
绑定被忽略。生成的 classes 仍然使用 xs:date 而不是 java.util.Date,并且不会生成适配器 class。将 wsimport 与导入 XSD.
的 wsdl 一起使用时,问题也可重现
将 a 重命名为 d 时,绑定按预期工作。有些路径有效,有些路径无效。这似乎是随机的,没有发现任何模式。给定路径的行为是一致的。
这是在 windows 10、windows 7 和 unix 机器上复制的。 Java 使用的版本是 1.7。0_79。绑定文件的名称似乎没有影响,但 XSD 文件的名称有影响。
是什么导致了这个问题,如何解决?为什么路径会影响绑定?是否有任何解决方法可以帮助避免此问题,同时确保即使路径更改也不会忽略绑定?
我认为这是 jaxb-xjc 中的错误。针对这些行为报告了一个问题:
wsimport 和 xjc 命令(均作为 Java JDK 的一部分下载)在目标 wsdl/xsds 放置在某些特定路径下时忽略提供的 jaxb 绑定文件。
要重现此行为,可以使用路径 C:\a。此目录包含以下 XSD 个文件:
nm.xsd:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:include schemaLocation="name.xsd"/>
<xs:annotation>
<xs:documentation xml:lang="en">Annotation</xs:documentation>
</xs:annotation>
<xs:element name="name" type="Name"/>
<xs:complexType name="FName">
<xs:sequence>
<xs:element name="value" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="LName">
<xs:sequence>
<xs:element name="value" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
name.xsd:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="Name">
<xs:sequence>
<xs:element name="FirstName" type="FName"/>
<xs:element name="LastName" type="LName"/>
<xs:element name="Date" type="xs:date"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
bindings.xjb:
<?xml version="1.0" encoding="UTF-8"?>
<jxb:bindings version="1.0" xmlns:jxb="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">
<jxb:globalBindings generateElementProperty="false" collectionType="indexed">
<jxb:javaType name="java.util.Date" xmlType="xs:date" parseMethod="com.company.Converter.parseDate" printMethod="com.company.Converter.printDate"/>
</jxb:globalBindings>
</jxb:bindings>
从 C:\a 使用以下命令生成 JAXB 工件:
xjc -b bindings.xjb nm.xsd
绑定被忽略。生成的 classes 仍然使用 xs:date 而不是 java.util.Date,并且不会生成适配器 class。将 wsimport 与导入 XSD.
的 wsdl 一起使用时,问题也可重现将 a 重命名为 d 时,绑定按预期工作。有些路径有效,有些路径无效。这似乎是随机的,没有发现任何模式。给定路径的行为是一致的。 这是在 windows 10、windows 7 和 unix 机器上复制的。 Java 使用的版本是 1.7。0_79。绑定文件的名称似乎没有影响,但 XSD 文件的名称有影响。
是什么导致了这个问题,如何解决?为什么路径会影响绑定?是否有任何解决方法可以帮助避免此问题,同时确保即使路径更改也不会忽略绑定?
我认为这是 jaxb-xjc 中的错误。针对这些行为报告了一个问题: