Как отладить маршалинг в JAXB? - PullRequest
4 голосов
/ 13 июля 2011

Во время маршалинга я получил следующее исключение

Exception in thread "main" com.sun.xml.internal.ws.encoding.soap.DeserializationException: Failed to read a response: javax.xml.bind.UnmarshalException
 - with linked exception:
[javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1127]
Message: XML document structures must start and end within the same entity.]

так что я хочу увидеть xml, где [row, col]: [1,1127] находится. Пожалуйста, предложите.

Ответы [ 4 ]

15 голосов
/ 06 марта 2012

Вы можете увидеть выходные данные отладки JAXB в консоли, указав -Djaxb.debug = true в опциях JVM. Кроме того, вы можете захотеть установить обработчик событий на unmarshaller: unmarshaller.setEventHandler (новый javax.xml.bind.helpers.DefaultValidationEventHandler ());

2 голосов
/ 13 июля 2011

Похоже, вы десериализуете сообщение SOAP. Вы можете включить отладку HTTP, добавив -Djavax.net.debug=all к вашим параметрам JVM. Это сбросит входящее сообщение. После того, как вы увидите свои входные данные, убедитесь, что начальный и конечный теги совпадают (согласно второй части сообщения об ошибке).

1 голос
/ 26 февраля 2014
JAXBContext context = JAXBContext.newInstance(jaxbObjectClass);
Unmarshaller unmarshaller = context.createUnmarshaller();
unmarshaller.setEventHandler(new javax.xml.bind.helpers.DefaultValidationEventHandler());
1 голос
/ 13 июля 2011

Я бы посоветовал вам создать точку останова исключения в XMLStreamException. По крайней мере, затмение позволяет это. Таким образом, вы сможете увидеть точку, где выдается исключение. наверное это поможет.

Кстати, я не уверен, что 1, 1127 совершенно неверно. Сначала проверьте (на всякий случай), что у вас нет чего-то нелегального в этой позиции. Во-вторых, убедитесь, что это не 1127-й символ вашего файла. Например, если файл был сгенерирован в Unix, где разделитель строк равен \ n, но вы запускаете код в Windows, где разделитель строк равен \ r \ n, система, вероятно, не распознает разрывы строк, поэтому она считает, что ваш XML отформатирован как очень длинная одиночная строка.

...