gpt4 book ai didi

java - 将 java.util.Date 映射到 xs :date instead of xs:dateTime in JAX-WS

转载 作者:行者123 更新时间:2023-11-30 09:55:13 24 4
gpt4 key购买 nike

我们有一个 EJB,jws-anotated 作为 Web 服务。它有一个相当复杂的 pojo 模型,可以生成同样复杂的 xsd。 pojos 包含许多 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。只是,我找不到有关如何执行此操作的任何信息(注释?)。

谁能给我一个提示?

亲切的问候,拉斯

最佳答案

我不是特别了解 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 中,我们使用映射来避免使用公历,但您可以使用它来进行转换。

关于java - 将 java.util.Date 映射到 xs :date instead of xs:dateTime in JAX-WS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2942439/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com