2015-03-23 3 views
0

У меня есть два поля в классе:немаршалинг nillable двойных значений

@XmlElement(nillable=true) 
protected Integer roomNumberTo; 
@XmlElement(nillable=true, type = Double.class) 
protected Double sizeFrom; 

оба поля являются необязательными. Проблема, с которой я столкнулась, - целое поле, может принимать значения null, но double не может.

< urn: sizeFrom> </urn: sizeFrom> // это всегда требует значения.
< урна: roomNumberFrom> </урна: roomNumberFrom> //

если выше запрос занесен я получаю немаршалинг Ошибки:
в org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall (JAXBEncoderDecoder.java: 881) на org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall (JAXBEncoderDecoder.java:702)

Вызванный: javax.xml.bind.UnmarshalException: - со связанным исключением: [java.lang.NumberFormatException :]

+0

Вы уверены, что Integer может его принять? Возможно, что, поскольку Double сначала не работает, вы даже не понимаете, что Integer также потерпит неудачу, если Double не существует. – tinker

+0

Да Целое число работает. (Например) Этот запрос работает <урна: sizeFrom> 55 <урна: roomNumberFrom>

ответ

0

Как уже указывалось, причина <urn:roomNumberFrom></urn:roomNumberFrom> не в том, что это просто неизвестный элемент и не отображается в поле roomNumberTo.

Если вы используете JAXB для объявления элемента XML с нулевым значением @XmlElement(nillable=true), пустой элемент не представляет собой нулевое значение. Если вы сопоставляете пространство имен XML Schema с префиксом «xsi», вы можете объявить нулевое значение следующим образом:

<urn:sizeFrom xsi:nil='true' /> 
+0

я решил его в конце с помощью адаптера XML (@XmlJavaTypeAdapter) @ XmlJavaTypeAdapter (типа = Double.class, значение = DoubleXmlAdapter.class) –

+0

общественного класс DoubleXmlAdapter расширяет XMLAdapter { Строка маршал общественности (Double doubleValue) бросает исключение { 'если (doubleValue! = NULL) вернуть doubleValue. нанизывать(); else null '} –

Смежные вопросы