2011-03-23 73 views
1

我有WSDL如下:的axis2的xsd:日期格式問題

< 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> 

當我生成(使用Axis2 1.5.3)的STUB,所產生的存根(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

歡迎使用堆棧溢出!重新問同樣的問題在這裏是不可接受的行爲。如果你想引起人們對你的問題的關注,那麼兩天後你將被允許[放置賞金](http://stackoverflow.com/faq#bounty)。您還可以[編輯您的問題](http://stackoverflow.com/posts/5219937/edit)添加其他信息,這可能會使您的問題更易於理解和回答。 – Will 2011-03-24 20:20:08

+0

另外,我已將您的兩個帳戶合併在一起。 [請閱讀有關基於Cookie的帳戶的此Faq條目。](http://meta.stackexchange.com/questions/44557/why-should-i-register-my-account/44562#44562)。 – Will 2011-03-24 20:23:25

回答

0

此代碼:

if (ConverterUtil.convertToString(param).matches("\\d{4}-\\d{2}-\\d{2}")) 

將只可用日期表現之一。在WSDL date specification中,您會發現2011-03-21+05:30也是正確的日期表示形式,它僅包含時區,即UTC到+5小時和30分鐘的偏移量。

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時間庫使用)