入力 xml を非整列化する単一の Long 変数を持つクラスがあります。unmarshal (単体テストを添付) を実行すると、ValidationEventHandler で次のエラーがスローされます。
[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」のタイプを Long ではなく Integer に変更すると、例外はスローされず、Jaxb は「creatorNo」を 0 に設定してクラスを作成するだけです。 ?
私が求めている実際の動作は、Jaxb に「creatorNo」をオプションとして扱い、空の XML 要素に対しては NULL に設定することです。これは可能ですか?
ありがとう