WSDL 没有处理 xjb。 xjb 用于作为 -b 参数传递的 xjc 编译器。
即
xjc -b <file>
文档:Customizing JAXB Binding
如果您使用 Maven 插件来生成您的 JAXB Java 类,它们中的任何一个都具有绑定配置,即
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<configuration>
<defaultOptions>
<bindingFiles>
<bindingFile>${project.interfaces.basedir}Configuration/Bindings/common-binding.xjb</bindingFile>
</bindingFiles>
或
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<configuration>
<schemaDirectory>${basedir}/src/main/resources/XMLSchema</schemaDirectory>
<bindingDirectory>${basedir}/src/main/resources/Bindings</bindingDirectory>
</configuration>
等等……
xjb 因为它很简单:
<jaxb:bindings xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.0"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
jaxb:extensionBindingPrefixes="xjc">
<jaxb:globalBindings>
<jaxb:serializable uid="1" />
<jaxb:javaType name="java.util.Calendar" xmlType="xsd:dateTime"
parseMethod="javax.xml.bind.DatatypeConverter.parseDateTime"
printMethod="javax.xml.bind.DatatypeConverter.printDateTime" />
<jaxb:javaType name="java.util.Calendar" xmlType="xsd:date"
parseMethod="javax.xml.bind.DatatypeConverter.parseDate" printMethod="javax.xml.bind.DatatypeConverter.printDate" />
<jaxb:javaType name="java.util.Calendar" xmlType="xsd:time"
parseMethod="javax.xml.bind.DatatypeConverter.parseTime" printMethod="javax.xml.bind.DatatypeConverter.printTime" />
</jaxb:globalBindings>
如您所见,它定义了从 xsd:dateTime、xsd:date 和 xsd:time 类型到 java.util.Calendar 的转换。
我不推荐使用 java.util.Date。日期处理有很多麻烦(尤其是不同的时区)。
最好使用 java.util.Calendar。日历更容易处理,JDK 中有默认的转换器实现:
javax.xml.bind.DatatypeConverter
但是,如果您仍然想使用 java.Util.Date,您需要拥有自己的小型转换器,其中包含两个静态方法“parse”和“print”,然后在 xjb 中设置它。即
public class MyDateConverter {
public static java.util.Date parse(String xmlDateTime) {
return javax.xml.bind.DatatypeConverter.parseDateTime(xmlDateTime).getTime();
}
public static String print(Date javaDate) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(javaDate.getTime());
return javax.xml.bind.DatatypeConverter.printDateTime(calendar);
}
}
您在 xjb 中的转化将如下所示:
<jaxb:javaType name="java.util.Date" xmlType="xsd:dateTime"
parseMethod="MyDatatypeConverter.parse"
printMethod="MyDatatypeConverter.print" />