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);
}
}
毫无疑问,还有更好的,但就是这样。
这是我的 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);
}
}
毫无疑问,还有更好的,但就是这样。