2017-02-19 106 views
9

当目标wsdl/xsds放置在某些特定路径下时,wsimport和xjc命令(都作为Java JDK的一部分下载)忽略提供的jaxb绑定文件。xjc/wsimport - 忽略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中使用:\一个以生成JAXB工件:

xjc -b bindings.xjb nm.xsd 

的结合被忽略。生成的类仍然使用xs:date代替java.util.Date,并且不会生成适配器类。使用导入XSD的wsdl使用wsimport时问题也是可重现的。

当重命名为ad时,该结合按预期工作。有些路径起作用,有些则不起作用。这似乎是随机的,没有发现任何模式。行为对于给定的路径是一致的。 这是在Windows 10,Windows 7和Unix机器上重现的。使用的Java版本是1.7.0_79。绑定文件的名称似乎没有效果,但是XSD文件的名称确实有效。

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

+1

我无法重现您的问题。首先,你的bindings.xjb文件似乎有问题。 的结束标记缺失。然后,具有相同的解析和打印方法(Converter应该使用Converter.print作为printMethod)是很奇怪的。您能否详细说明您使用的JDK7版本以及您称之为wsimport命令的目录?你能否在你打开wsimport的目录和wsimport命令本身的输出中打印'tree/f'的输出?谢谢! – boskoop

+0

嗨boskoop,谢谢你的回复。我修复了全局绑定标记和printMethod(不影响该问题)。我正在使用jdk1.7.0_79。我将尝试在不泄露机密信息并更新问题的目录中重现此问题。 –

+0

尝试使用示例wsdls和xsds重现 –

回答