Ore*_* P. 9 java wsdl jaxb xjc wsimport
当目标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>
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
从C:\ a使用以下命令来生成JAXB工件:
xjc -b bindings.xjb nm.xsd
Run Code Online (Sandbox Code Playgroud)
绑定被忽略.生成的类仍使用xs:date而不是java.util.Date,并且未生成适配器类.将wsimport与导入XSD的wsdl一起使用时,问题也是可重现的.
将a重命名为d时,绑定按预期工作.有些路径有效,有些则没有.这似乎是随机的,没有确定模式.行为对于给定路径是一致的.这是在Windows 10,Windows 7和unix机器上重现的.使用的Java版本是1.7.0_79.绑定文件的名称似乎没有效果,但XSD文件的名称有效.
可能导致此问题的原因是什么?为什么路径会影响绑定?是否有任何解决方法可以帮助避免此问题,同时确保即使路径更改也不会忽略绑定?
| 归档时间: |
|
| 查看次数: |
1105 次 |
| 最近记录: |