【问题标题】:xjc/wsimport - JAXB binding ignoredxjc/wsimport - 忽略 JAXB 绑定
【发布时间】:2017-02-19 15:15:07
【问题描述】:

当目标 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:date 而不是 java.util.Date 并且没有生成适配器类。将 wsimport 与导入 XSD 的 wsdl 一起使用时,问题也可重现。

a 重命名为 d 时,绑定按预期工作。有些路径有效,有些则无效。这似乎是随机的,没有发现任何模式。给定路径的行为是一致的。 这是在 windows 10、windows 7 和 unix 机器上复制的。使用的 Java 版本是 1.7.0_79。绑定文件的名称似乎没有影响,但 XSD 文件的名称有。

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

【问题讨论】:

  • 我无法重现您的问题。首先,您的 bindings.xjb 文件似乎有问题。 的结束标记丢失。那么使用相同的解析和打印方法是很奇怪的(例如,转换器应该使用 Converter.print 作为 printMethod)。您能否提供更多关于您使用的 JDK7 次要版本以及您从哪个目录调用 wsimport 命令的详细信息?您能否在您调用 wsimport 的目录中打印“tree /f”的输出以及 wsimport 命令本身的输出?谢谢!
  • 您好 boskoop,感谢您的回复。我修复了全局绑定标签和 printMethod(不影响问题)。我正在使用 jdk1.7.0_79。我将尝试在不泄露机密信息的目录上重现该问题并更新问题。
  • 尝试使用示例 wsdls 和 xsds 进行重现
  • 所以这意味着 ~\Deskop\config\ws\cccc 中的 XSD 已导入到 ~\Desktop\config\ws\Common 目录中的 XSD。我是否正确假设您使用的是相对路径(类似于 schemaLocation="../Common/somefile.xsd")?
  • 我缩小了问题的范围,我将发布一个更新,描述一种非常简单的重现方法

标签: java jaxb wsdl xjc wsimport


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-12-12
    • 1970-01-01
    • 2011-09-28
    • 2011-05-02
    • 2016-08-10
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多