我正在开发一个应用程序,在该应用程序中,我们使用 Spring Web 服务通过 wsdl 生成的文件调用第三方 SAP 系统。
通过 ws 导入使用 wsdl 生成的文件之一具有“XMLGregorianCalendar”类型的 Date 属性,作为响应,我们得到相应字段的空值。
我想将日期从 XmlGregorianCalendar 转换为 java.util.Date。
引用:how replace XmlGregorianCalendar by Date? 但无法通过 wsdl 提供适当的 xjb 绑定(bind)。
如果有人可以建议转换由 wsdl 生成的日期,那将有很大帮助..... 提前致谢 ! 术赤
最佳答案
WSDL 与 xjb 没有任何关系。 xjb 适用于作为 -b 参数传递的 xjc 编译器。 即
xjc -b <file>
如果您使用 Maven 插件来生成您的 JAXB Java 类,那么它们中的任何一个都具有绑定(bind)配置,即
<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" />
关于java - 将 wsdl 生成的 XmlGregorianCalendar 类型的日期替换为 java.util.Date?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40549526/