我正在开发一个应用程序,在该应用程序中,我们使用Spring Webservices通过WSDL生成的文件调用第三方SAP系统。
通过ws导入使用wsdl生成的文件之一具有类型为“XMLGregorianCalendar”的Date属性,作为响应,我们将获得相应字段的空值。
我想将日期从XmlGregorianCalendar转换为java. util. Date。
曾提及:how replace XmlGregorianCalendar by Date?,但无法通过wsdl提供适当的xjb绑定。
如果有人能建议转换由wsdl生成的日期,这将是很大的帮助。提前感谢!舒池
6条答案
按热度按时间ogsagwnx1#
WSDL与xjb没有任何关系。xjb用于xjc编译器,作为-b参数传递。即
文件:Customizing JAXB Binding
如果你使用Maven插件来生成你的JAXB Java类,它们中的任何一个都有绑定配置,即
或
等等
xjb很简单:
如您所见,它定义了从xsd:dateTime、xsd:date和xsd:time类型到java. util. Calendar的转换。
我不建议使用java. util. Date。日期处理有很多麻烦(特别是不同时区)。最好使用java. util. Calendar。日历更容易处理,JDK中有默认的转换器实现:
但是,如果您仍然想使用java.Util.Date,您需要有自己的小转换器,它包含两个静态方法“parse”和“print”,然后在xjb中设置它。即
你在xjb中的转换看起来像这样:
ruoxqz4g2#
你必须创建一个自定义的数据类型适配器并添加到绑定文件中。
DateDataTypeAdapter类
nmpmafwu3#
@vadim的回答对我来说很有用,还有一些额外的细节......
我使用的是spring Boot 1.5.3和2.3.1版本的jaxb 2-maven-plugin,在这种情况下,我必须声明我的xjb文件如下:
在我的例子中,xjb文件的内容是:
DataTypeConverter的内容是:
希望这对某人有帮助!!:)
ogsagwnx4#
这可能是一个黑客,但它的工作。
使用wsimport生成代码后,可以在文件中执行查找和替换,将所有对XmlGregorianCalendar的引用替换为java.util.Date。JAXB将很乐意为您完成所有的处理并自动完成转换。无需适配器。我使用这种方法没有遇到任何问题。
oiopk7p55#
我已经将bean的java类型从
XMLGregorianCalendar
更改,直接在xsd的合约中添加了jaxb的配置。我已经这样做了,注意
xs:annotation
:运行maven构建时,还需要在JVM上添加
-Djavax.xml.accessExternalSchema=all
参数。mxg2im7a6#
感谢Vadim's answer,我最终使用了
LocalDate
和LocalDateTime
:xjb:
(not确保它适用于
gMonthDay
)JaxbDateConverter: