2012-04-25 3 views
3

Есть ли способ выбросить исключение, определяемое пользователем, в XmlAdapter и поймать их, когда JAXB marshalles/unmarshalls? Я имею в виду, я могу бросить свое собственное исключение, но JAXB просто игнорирует это исключение и бросает его, из которого я не могу добраться до моего сообщения об исключении или объекта исключения.XmlJavaTypeAdapter throw user defined exception

try { 
    Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); 
    jaxbUnmarshaller.unmarshal(inputStream); 
} 
catch (UserDefinedException e) { 
    // Do something. 
} 

Извините, что не опубликовал правильное исключение, которое JAXB выбрал вместо моего. На данный момент я не могу добраться до кода. Currentlly Я использую JAXB-RI, но я использовал EclipseLink MoXY и столкнулся с этой проблемой.

Я отправлю дополнительные данные, когда я получу руку от кода. Но до тех пор, может быть, кто-то знает, о чем я говорю. Некоторый пример кода правильного использования XmlAdapter также замечателен.

Спасибо.

ответ

1

Ожидание внедрения JAXB (JSR-222) заключается в том, что оно выбрасывает JAXBException. Это означает, что любые исключения, выброшенные внутри чего-то вроде XmlAdapter, будут в конечном итоге обернуты. Вы могли бы потенциально использовать динамическую XmlAdapter обрабатывать этот случай использования:

Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); 
MyXmlAdpater myXmlAdapter = new MyXmlAdapter(); 
jaxbUnmarshaller.setAdatper(myXmlAdapter); 
jaxbUnmarshaller.unmarshal(inputStream); 
if(myXmlAdapter.hasException() { 
    // Do something. 
} 

Для примера использования запоминания состояния XmlAdapter смотрите:

+1

Ну Блеза, это работает как шарм , Благодарю. Я вернулся к EclipseLink MOXy. У меня были проблемы с моими задачами XmlAdapters и JAXB-RI Ant, но с MOXy-генератором работы schmea. Для всех, кто читает этот комментарий, я настоятельно рекомендую вам использовать EclipseLink MOXy для ваших потребностей JAXB. Это сэкономит вам массу нервов и времени. –