我使用 apache cxf 生成了一些基于 WSDL 的模型类。然后我添加了一个 jaxb 绑定文件来将所有 xs:dateTime 和 xs:date 元素转换为 java.util.date(而不是默认的 XMLGregorianCalendar):
<jxb:javaType name="java.util.Date" xmlType="xs:date"
parseMethod="org.apache.cxf.tools.common.DataTypeAdapter.parseDate"
printMethod="org.apache.cxf.tools.common.DataTypeAdapter.printDate"/>
<jxb:javaType name="java.util.Date" xmlType="xs:dateTime"
parseMethod="org.apache.cxf.tools.common.DataTypeAdapter.parseDateTime"
printMethod="org.apache.cxf.tools.common.DataTypeAdapter.printDateTime"/>
这一切都很好,completype 元素的所有 xs:date 和 xs:dateTime 属性都生成为 java.util.Date。
当我尝试基于这些模型对象创建 Metro JAX-WS 服务时,就会出现问题。在我的情况下,所有 java.util.Date 字段都呈现为服务的 .xsd 文件中的 dataType xs:string。
我不知道为什么会发生这种情况,除了相关的模型属性,在 cxf 生成之后,用以下注释:
@XmlElement(required = true, type = String.class)
@XmlJavaTypeAdapter(Adapter1 .class)
protected Date datumTijdBedrijfsdocument;
我可以想象 type="String.class" 可能是所有属性都生成为 xs:string 字段的原因。
当然,我可以手动编辑所有对象,但我真的在 Metro 的 apache CFX 中寻找解决方案,以声明方式防止此问题。
我希望你们能帮助我,因为这个问题让我陷入了僵局
谢谢!