我有一個類,只有一個Long變量,我希望我的輸入xml被解組。當我運行解組(單元測試附後)我得到以下錯誤的的ValidationEventHandlerJaxb Unmarshaller以不同的方式處理Long和Integer
[severity=ERROR,message=For input string: "",locator=node=null,object=null,url=null,line=1,col=96,offset=-1]]
LinkedException: java.lang.NumberFormatException: For input string: ""
拋出的類和單元測試是這樣的 -
@XmlRootElement
public class Annotation {
private Long creatorNo;
public Long getCreatorNo() {
return creatorNo;
}
public void setCreatorNo(Long creator) {
creatorNo = creator;
}
}
單元測試 -
public class AnnotationTest {
@Test
public void testUnmarshall() throws Exception {
final String inputXML = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><annotation><creatorNo></creatorNo></annotation>";
final JAXBContext jaxbContext = JAXBContext.newInstance(Annotation.class);
final Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
unmarshaller.setEventHandler(new UnmarshallerValidationEventHandler());
final Annotation annotationObject = (Annotation)unmarshaller.unmarshal(new StringReader(inputXML));
}
}
從看起來像,Jaxb不喜歡被傳遞給一個Long類型的空元素。但是現在,如果我在'Annotation'類中將'creatorNo'的類型改爲Integer而不是Long,那麼不會拋出任何異常,並且Jaxb只會創建'creatorNo'類設置爲0的類。那麼爲什麼這種不同的行爲?
我之後的真實行爲是我希望Jaxb將'creatorNo'視爲可選項,並將其設置爲NULL併爲空XML元素。這可能嗎?
感謝