Apache CXF 如何处理没有时区的日期转换 xsd:date 到 java.util.Date

Apache CXF how to handle date conversion xsd:date to java.util.Date without timezone

这是我的 CXF 问题。我有一个用 CXF 编写的 SOAP1.2 服务。该服务并不复杂,它基本上放置了一个 XML int DB (Oracle 11.x)。 WSDL 中的所有日期都定义为 xsd:date。

我定义了以下 jaxb 绑定

    <jxb:javaType name="java.util.Date" xmlType="xsd:date"
        parseMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.parseDate"
        printMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.printDate" />

而利用这些的适配器class如下

public class Adapter2
extends XmlAdapter<String, Date>
{


public Date unmarshal(String value) {
    return (org.apache.cxf.xjc.runtime.DataTypeAdapter.parseDate(value));
}

public String marshal(Date value) {
    return (org.apache.cxf.xjc.runtime.DataTypeAdapter.printDate(value));
}
}

由于 cxf..runtime.DataTypeAdapter 总是产生 java.util.Date,所以总是会添加一个时间,这反过来又是 Oracle 的问题,因为 Oracle 的 xml 验证的本机过程在以下情况下产生错误它遇到日期和时间。 (更改数据库设置不是一个选项)。

什么 libraries/classes 可以用来 marshal/unmrashal xsd:date 没有时间的约会? 或者我必须自己写 class 扩展 XmlAdapter?

我想到了这个

import java.util.Date;
import java.text.SimpleDateFormat;

import org.apache.cxf.xjc.runtime.DataTypeAdapter;

public class DateTypeAdapterWrapper {

    private static final String DATE_FORMAT = "yyyy-MM-dd";

    public static Date parseDate(String value) {
        return (DataTypeAdapter.parseDate(value));
    }

    public static String printDate(Date value) {
        String tmp = DataTypeAdapter.printDate(value);
        if(tmp == null) {
            return null;
        }
        SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT);
        return dateFormat.format(value);
    }
}

毫无疑问,还有更好的,但就是这样。