【问题标题】:Mapping java.util.Date to xs:date instead of xs:dateTime in JAX-WS在 JAX-WS 中将 java.util.Date 映射到 xs:date 而不是 xs:dateTime
【发布时间】:2010-05-31 08:57:36
【问题描述】:

我们有一个 EJB,jws 注释为 Web 服务。它有一个非常复杂的 pojo 模型,可以生成同样复杂的 xsd。 pojo 包含许多 java.util.Date。这些都映射到 xs:dateTime。

此服务在 Oracle(BEA) OSB(AquaLogic) 中用作“业务服务”。我们还有一个“代理服务”,我们使用 XQuery(OSB/AquaLogic 方式)将其映射到 BS。代理服务的 xsd 具有对应字段的 xs:date。 出于某种原因,Oracle 的 XQuery 实现不支持从 xs:date 转换为 xs:dateTime(!)。

我可以通过强制转换为 xs:string 并使用 "T00:00:00" 连接来解决这个问题,但是,我宁愿尝试让 JAX-WS 生成带有 xs:date 的 xsd。只是,我找不到有关如何执行此操作的任何信息(注释?)。

谁能给我一个提示?

亲切的问候, 拉尔斯

【问题讨论】:

    标签: java datetime date jax-ws


    【解决方案1】:

    我不具体了解 Oracle,但对于 CXF,有一些实用程序可以进行此映射。您也许可以为您的配置找到类似的适配器。看看下面的页面。 http://cxf.apache.org/docs/wsdl-to-java.html.

    根据您的架构是在 WSDL 中还是在单独的 URL 中,有两个选项(我知道您是在 Java 优先配置中,但您正在尝试在代理端进行转换)。

    <jaxws:bindings wsdlLocation="YOUR_WSDL_LOCATION"
              xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
              xmlns:xs="http://www.w3.org/2001/XMLSchema"
              xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
              xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
      <jaxws:bindings  node="wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='THE_NAMESPACE_OF_YOUR_SCHEMA']">
          <jxb:globalBindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema">
            <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"/>
          </jxb:globalBindings>
      </jaxws:bindings>
    </jaxws:bindings>
    

    XSD:外部,JAXB 语法

    <jxb:bindings version="2.0"
                  xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
                  xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <jxb:bindings schemaLocation="file:<path><name>.xsd" node="/xs:schema">
        <jxb:globalBindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema">
          <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"/>
        </jxb:globalBindings>
      </jxb:bindings>
    </jxb:bindings>
    

    在我们的 CXF 中,我们使用映射来避免使用公历,但您可能可以使用它来进行转换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-05
      • 2011-10-20
      • 2016-09-15
      • 1970-01-01
      • 2014-12-31
      相关资源
      最近更新 更多