更改Web service日期格式

项目QA开始用WSDL测试代码,每天一大堆的web service 的问题。
其中一个比较BT就是用SOAPUI测试,因为项目中本来默认的是yyyyMMdd,但webservice认的是yyyy-MM-dd.
每个方法写确认是不现实的,仔细再看一下,原来我的项目中转SOAP用的JAXB。那就好办了。实现XmlAdapter 就OK了。
帖代码,其实主要实现unmarshal 和 marshal方法。

    private static SimpleDateFormat yyyyMMdd = new SimpleDateFormat("yyyyMMdd");
private static Pattern NUMBER_FORAMTER_PATTERN = Pattern.compile("\\d{8}");
private static final DatatypeFactory datatypeFactory;
static {
try {
datatypeFactory = DatatypeFactory.newInstance();
} catch (DatatypeConfigurationException e) {
throw new Error(e);
}
}

@Override
public Date unmarshal(String v) throws Exception {
if (StringUtils.isBlank(v) ) return null ;
String dateString = v.trim();
if( NUMBER_FORAMTER_PATTERN.matcher(dateString).matches() ) {
return yyyyMMdd.parse(dateString);
}
else {
return datatypeFactory.newXMLGregorianCalendar(dateString).toGregorianCalendar().getTime();
}


}

@Override
public String marshal(Date v) throws Exception {
if(v == null) return null;
Calendar cal = new GregorianCalendar(0,0,0);
cal.setTime(v);
return CalendarFormatter.doFormat("%Y-%M-%DT%h:%m:%s%z", cal);
}


还要加上一个包级别的annotation:
写个package-info.java,里面加包级相关的东西。

@javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters
({
@javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter(type=java.util.Date.class, value=test.DateAdapter.class),
@javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter(type=java.util.Calendar.class, value=test.CalendarAdapter.class)
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值