Кто-нибудь еще видел поврежденный текст библиотеки Java XML FastInfoset?
Я читал заявления людей из Sun о чудесной космической экономии, заключающейся не только в использовании FastInfoSet, но и в использовании внешнего внешнего словаря. Код для этой цели включен в самую последнюю версию (1.2.8), но он не полностью документирован.
Для многих файлов это работает просто отлично для меня. Однако мы создали файл XML, который при сериализации из DOM с вокабом, который я создал (используя генератор в библиотеке FI), и затем считал обратно в DOM, не соответствует. Несоответствия все в ПК-данных.
Я просто вызываю setVocabulary на сериализаторе и setExternalVocabulary с картой из URI в словарь для читателя.
Я должен был изобрести свой собственный механизм, чтобы фактически сериализовать словарь; там, кажется, нигде не было в библиотеке FI.
Один сложный вопрос заключается в том, что класс org.jvnet.fastinfoset.Vocabulary - это то, что дает вам генератор, но это не то, что едят парсеры и сериализаторы. Я принял меры для их сериализации, а затем использовал приведенный ниже код, чтобы превратить их в нужные объекты:
private static void initializeAnalysis() {
InputStream is = FastInfosetUtils.class.getResourceAsStream(ANALYSIS_VOCAB_CLASSPATH);
try {
ObjectInputStream ois = new ObjectInputStream(is);
analysisJvnetVocab = (SerializableVocabulary) ois.readObject();
ois.close();
} catch (IOException e) {
throw new RuntimeException(e);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
analysisSerializerVocab = new SerializerVocabulary(analysisJvnetVocab.getVocabulary(), false);
analysisParserVocab = new ParserVocabulary(analysisJvnetVocab.getVocabulary());
}
а затем, на самом деле написать документ:
SerializerVocabulary fullVocab = new SerializerVocabulary();
fullVocab.setExternalVocabulary(ANALYSIS_VOCAB_URI, analysisSerializerVocab, false);
// pass fullVocab to setVocabulary.
и читать:
Map<Object, Object> vocabMap = new HashMap<Object, Object>();
vocabMap.put(ANALYSIS_VOCAB_URI, analysisParserVocab);
// pass map into setExternalVocabulary
Я легко могу представить, что рецепт создания словарей сериализации не верен, я не читал учебник. Кто-нибудь случайно знает?
ОБНОВИТЬ
Поскольку ни у кого здесь не было ничего, чтобы добавить к этому вопросу, я сделал тестовый пример и отправил отчет об ошибке. В некотором смысле, к моему удивлению, оказалось, что это была ошибка, и исправление было сделано.