2014-02-28 17 views
0

在我的WSDL我定義,像這樣生日元素:CXF 2.7.7在Windows下無法處理日期時間元素

<xs:element minOccurs="0" name="birthDate" type="xs:dateTime"/> 

時在SOAP信封中該元素存在,但爲空,即會發生什麼

<birthDate></birthDate> 

我得到下面的異常

org.apache.cxf.interceptor.Fault: Unmarshalling Error: 

,並在堆棧中進一步下跌

Caused by: javax.xml.bind.UnmarshalException 
- with linked exception: 
[com.sun.istack.SAXParseException2; lineNumber: 0; columnNumber: 0; ] 
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.handleStreamException(UnmarshallerImpl.java:435) 
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:372) 
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:349) 
    at org.apache.cxf.jaxb.JAXBEncoderDecoder.doUnmarshal(JAXBEncoderDecoder.java:842) 
    at org.apache.cxf.jaxb.JAXBEncoderDecoder.access$100(JAXBEncoderDecoder.java:101) 
    at org.apache.cxf.jaxb.JAXBEncoderDecoder$2.run(JAXBEncoderDecoder.java:870) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:868) 
    ... 33 more 
Caused by: com.sun.istack.SAXParseException2; lineNumber: 0; columnNumber: 0; 
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:662) 
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleError(UnmarshallingContext.java:691) 
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleError(UnmarshallingContext.java:687) 
    at com.sun.xml.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl$12.parse(RuntimeBuiltinLeafInfoImpl.java:585) 
    at com.sun.xml.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl$12.parse(RuntimeBuiltinLeafInfoImpl.java:559) 
    at com.sun.xml.bind.v2.runtime.FilterTransducer.parse(FilterTransducer.java:84) 
    at com.sun.xml.bind.v2.runtime.reflect.TransducedAccessor$CompositeTransducedAccessorImpl.parse(TransducedAccessor.java:247) 
    at com.sun.xml.bind.v2.runtime.unmarshaller.LeafPropertyLoader.text(LeafPropertyLoader.java:65) 
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.text(UnmarshallingContext.java:514) 
    at com.sun.xml.bind.v2.runtime.unmarshaller.InterningXmlVisitor.text(InterningXmlVisitor.java:93) 
    at com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.processText(StAXStreamConnector.java:338) 
    at com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.handleEndElement(StAXStreamConnector.java:216) 
    at com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(StAXStreamConnector.java:185) 
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:370) 
    ... 39 more 
Caused by: javax.xml.bind.UnmarshalException: 
- with linked exception: 
[java.lang.IllegalArgumentException: ] 
    ... 53 more 
Caused by: java.lang.IllegalArgumentException: 
    at com.sun.org.apache.xerces.internal.jaxp.datatype.XMLGregorianCalendarImpl$Parser.parseAndSetYear(XMLGregorianCalendarImpl.java:2887) 
    at com.sun.org.apache.xerces.internal.jaxp.datatype.XMLGregorianCalendarImpl$Parser.parse(XMLGregorianCalendarImpl.java:2773) 
    at com.sun.org.apache.xerces.internal.jaxp.datatype.XMLGregorianCalendarImpl.<init>(XMLGregorianCalendarImpl.java:435) 
    at com.sun.org.apache.xerces.internal.jaxp.datatype.DatatypeFactoryImpl.newXMLGregorianCalendar(DatatypeFactoryImpl.java:536) 
    at com.sun.xml.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl$12.parse(RuntimeBuiltinLeafInfoImpl.java:583) 
    ... 49 more 

但是每當元素不存在或者設置爲即

<birthDate>1907-07-16T19:20:30</birthDate> 

一切工作正常。

更令人困惑的是,這個問題只有在Windows下工作時纔會出現。在Linux下沒有問題。

什麼會導致這種奇怪?我該如何解決它?

謝謝。

回答

0

根據this JIRA on the Apache site,其中列出了一個非常類似的例外您:

<ns2:SUBMITDATE></ns2:SUBMITDATE>不讓它空。這使得它成爲一個空的字符串,對於一個日期是無效的,JAXB在這種情況下正確地拋出一個IllegalArgumentException。如果你希望它爲空,它應該是: <ns12:SUBMITDATE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> 因此,傳入的XML對於每個模式都是無效的,並且CXF/JAXB按照設計工作。

不確定爲什麼它可以在Linux上運行,但不能在Windows上運行。