#xml #soap #odata
#xml #soap #odata
Вопрос:
Я опубликовал службу OData для таблицы под названием Tickets. Я вижу, что синтаксический анализ идет не так в http://localhost:8080/odata/ticket_odata/Tickets ?$skip=39947. Я получил это сообщение об ошибке;
XML Parsing Error: XML or text declaration not at start of entity
Location: file:///C:/Users/sk/AppData/Local/Temp/Tickets-3
Line Number 757, Column 34:
Temperatures vary between 80 and <?xml version='1.0' encoding='UTF-8'?><error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"><code>500</code><message xml:lang="en-US">Exception occurred while processing OData request.</message></error>
---------------------------------^
Я также получаю этот stacktrace;
com.ctc.wstx.exc.WstxIOException: Invalid white space character (0xe) in text to output (in xml 1.1, could output as a character entity)
at com.ctc.wstx.sw.BaseStreamWriter.writeCharacters(BaseStreamWriter.java:469)
at akka.stream.alpakka.xml.impl.StreamingXmlWriter$$anon$1.onPush(StreamingXmlWriter
Но когда я смотрю в http://localhost:8080/odata/ticket_odata/Tickets ?$skip = 39946 Я вижу, что объект, в котором что-то пошло не так, полностью выписан, поле «описание» записано полностью, в то время как при skip = 39947 выдается ошибка.
При просмотре базы данных я вижу последний идентификатор объекта Ticket = 140737488359769, который возвращается в http://localhost:8080/odata/ticket_odata/Tickets ?$skip=3994.
При поиске следующего идентификатора объекта Ticket = 140737488359770, который НЕ удалось найти. Может ли попытка найти пустой объект причиной? или идентификатор не существует? Пока я нашел идентификатор объекта Ticket = 140737488359771.
Итак, мой вопрос в конце, что вызывает эту ошибку синтаксического анализа OData, как я могу это исправить? Но я также не знаю, как проверить поле, вызывающее эту ошибку, как я могу это сделать?
ПРАВКА 1: Когда я добавляю запись с отсутствующим идентификатором 140737488359770, синтаксический анализ проходит нормально. Итак, что означает, что OData сама по себе хочет получить следующий идентификатор? Как я мог это пропустить?
EDIT2: теперь я получаю другую ошибку в http://localhost:8080/odata/ticket_odata/Tickets ?$skip=39948
'<' hexadecimal value 0x3c is an invalid attribute character
Ответ №1:
Вы задаете два вопроса:
(1) Итак, мой вопрос в конце, что вызывает эту ошибку синтаксического анализа OData?
(2) Но я также не знаю, как проверить поле, вызывающее эту ошибку, как я могу это сделать?
Что касается вопроса (1), мы не знаем. Какой бы процесс или рабочий процесс ни генерировал этот XML, он имеет ошибку, которая приводит к неправильной форме XML. Мы не можем диагностировать это, не зная ничего (возможно, всего!) об этом процессе.
Что касается вопроса (2), вам необходимо изучить данные с помощью инструментов, отличных от XML, например, шестнадцатеричного редактора.
Ответ №2:
Я решил это, Ticket / id 140737488359769 содержал несколько нечитаемых символов (прямоугольники в описании), удаление которых решило проблему. Просмотр объекта после выдачи ошибки.