我有WSDL如下:
< xsd:simpleType name="USER_ACT_STRDT_TypeDef">
< xsd:annotation>
< xsd:documentation>USER_ACT_STRDT is a date.< /xsd:documentation>
< /xsd:annotation>
< xsd:restriction base="xsd:date">
< xsd:pattern value="(\d{4}-\d{2}-\d{2})"/>
< /xsd:restriction>
< /xsd:simpleType>
当我生成STUB(使用Axis2 1.5.3)时,生成的存根(ADB数据绑定)具有以下源代码:
public void setUSER_ACT_STRDT_TypeDef(Date param) {
if (ConverterUtil.convertToString(param).matches("\d{4}-\d{2}-\d{2}")) {
this.localUSER_ACT_STRDT_TypeDef=param; } else { throw new java.lang.RuntimeException();
} }
此方法始终抛出RuntimeException,因为ConverterUtil.convertToString()方法返回的字符串格式与“yyyy-mm-dd”不同。它通过在2011-03-21 + 05:30附加+5.30来返回日期。
我尝试以不同的格式传递日期,但所有结果都相同。
任何人都可以建议如何解决此问题。
答案 0 :(得分:0)
此代码:
if (ConverterUtil.convertToString(param).matches("\\d{4}-\\d{2}-\\d{2}"))
只能使用其中一个日期表示。在WSDL date specification中,您会发现2011-03-21+05:30
也是正确的日期表示,它只包括时区为+5小时和30分钟偏移到UTC。
默认情况下,Axis2会生成带有时区的日期,但应该可以使用其他日期格式。
要检查字符串是否以YYYY-MM-DD
日期开头,您可以使用此类代码:
if (! sd.matches("\\d{4}-\\d{2}-\\d{2}.*"))
throw new ParseException("Something is terribly wrong with date: " + sd, 0);
else
{
sd = sd.substring(0, 10);
System.out.println("ok: '" + sd + "'");
}
PS你是否以\d
逃脱\\d
?
PPS为什么要抛出RuntimeException
?有很多“更好”的例外,例如ParseException
(由JDK日期解析方法使用)或IllegalArgumentException
(由joda时间库使用)