Когда я демарширую узел XML в свойство, вызывается setMyProperty.
Код установщика свойства может вызвать исключение: что происходит в этом случае?
Поведение, которое я наблюдал: если исключение является непроверенным исключением, то оно поглощается внутренними компонентами jaxb, и это свойство игнорируется. Если RuntimeException изменяется в Exception (поэтому проверяется и добавляется в предложение throws установщика свойств), это приводит к сбою unmarshal.
Вопрос в том: на это поведение можно положиться?
заранее спасибо
Агостино
PS: Хорошо, «проглоченный» - не правильное слово, потому что на самом деле он управляется «наилучшим из возможных способов», корректно отменяя остальную часть документа. Тем не менее вызывающий абонент не уведомляется о том, что произошло исключение.
PS: простой тестовый случай, на всякий случай: -)
package test.jaxb;
import java.io.File;
import javax.xml.bind.*;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class SZL {
public static void main(String [] args) throws JAXBException {
SZL test = new SZL();
test.myProp = "test-value";
test.setMyProp2("test-value-2");
JAXBContext jc = JAXBContext.newInstance(SZL.class);
File f = new File("SZL.xml");
Marshaller m = jc.createMarshaller();
m.marshal(test, f);
test = null;
Unmarshaller um = jc.createUnmarshaller();
test = (SZL)um.unmarshal(f);
System.out.println("The RuntimeException has been swallowed");
System.out.println(test.myProp);
System.out.println(test.myProp2);
}
private String myProp;
public void setMyProp(String myProp) {
throw new RuntimeException();
//this.myProp = myProp;
}
public String getMyProp() {return myProp;}
private String myProp2;
public void setMyProp2(String myProp2){
this.myProp2 = myProp2;
}
public String getMyProp2() {return myProp2;}
}