Обработка спецификации в демаршаллере JAXB

Как JAXB может обрабатывать строку (XML), начинающуюся со спецификации? Есть ли свойство для установки или какая-либо конфигурация для пропуска спецификации при десортировке? Существуют ли другие реализации JAXB, которые могли бы сделать это помимо реализации Oracle?


person srncristea    schedule 26.01.2015    source источник


Ответы (1)


Если вы имеете в виду файл UTF-8 со спецификацией, вам придется пропустить его самостоятельно. Довольно просто придумать класс InputStream, который проверяет первые два байта на наличие спецификации, пропускает их и иным образом заключает в себе другой InputStream. Это было задокументировано в этом ответе SO и откройте исходный код для этой цели доступен на GitHub.

Если вы имеете в виду какую-то другую кодировку, такую ​​как UTF-16, JRE должна прочитать спецификацию из потока UTF-16 и отбросить ее сама.

person dcsohl    schedule 26.01.2015
comment
У меня есть строка, представляющая собой xml-контент, что-то вроде этого '‹?xml version=1.0 encoding=utf-8?› ....', и я создаю StringReader для чтения содержимого в unmarshaller следующим образом: unmarshaller.unmarshal( новый StringReader (xml)); но строка начинается с спецификации, и здесь возникла проблема после сбоя процесса десортировки, я подумал, что у JAXB есть какое-то свойство для настройки и самостоятельной обработки символа спецификации без каких-либо изменений с моей стороны. - person srncristea; 26.01.2015
comment
Нет, вам все равно придется делать это самостоятельно, к сожалению. Могу ли я также обратить ваше внимание на проект Apache Commons IO, особенно на BOMInputStream и/или XmlStreamReader? - person dcsohl; 26.01.2015
comment
да, мне нужно взглянуть на эти классы, большое спасибо за вашу помощь;). - person srncristea; 27.01.2015