axis2 xsd:日期格式问题

时间:2011-03-23 06:35:58

标签: axis2

我有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来返回日期。

我尝试以不同的格式传递日期,但所有结果都相同。

任何人都可以建议如何解决此问题。

1 个答案:

答案 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时间库使用)