XJC/WSIMPORT -JAXB绑定被忽略



当目标wsdl/xsds放置在某些特定路径下时,WSIMPORT和XJC命令(均为Java JDK的一部分下载)忽略了提供的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

绑定被忽略。生成的类仍使用XS:日期而不是java.util.date,并且适配器类未得到生成。使用WSIMPORT与导入XSD的WSDL一起使用WSIMPORT时,问题也可以重现。

重命名 a to d 时,绑定正常工作。有些路径有效,另一些路径则行不通。这似乎是随机的,没有发现模式。给定路径的行为是一致的。这是在Windows 10,Windows 7和Unix机器上复制的。使用的Java版本为1.7.0_79。绑定文件的名称似乎没有效果,但是XSD文件的名称确实没有效果。

什么可能导致此问题,如何解决这个问题?路径为什么会影响结合?是否有任何解决方法可以帮助避免此问题,同时确保即使路径发生变化也不会忽略绑定?

我认为这是jaxb-xjc中的错误。这些行为报告了一个问题:

https://github.com/javaee/jaxb-v2/issues/1121

最新更新