我们有一个EJB,jws-anotated as a web service。它有一个相当复杂的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。只是,我找不到任何关于如何做到这一点的信息(anotations?)。
任何人都可以给我一个提示吗?
亲切的问候, 拉斯
答案 0 :(得分:2)
我不是特别了解Oracle,但对于CXF,有一些实用程序可以执行此映射。您可能能够为您的配置找到类似的适配器。看看下面的页面。 http://cxf.apache.org/docs/wsdl-to-java.html
根据您在WSDL中的架构或单独的URL中有两个选项(我知道您在Java第一个配置中,但是您尝试在Proxy端进行转换)。
<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中,我们使用映射来避免使用格里高利历,但您可以使用它来进行转换。