Кто-нибудь еще видел поврежденный текст библиотеки Java XML FastInfoset? - PullRequest
1 голос
/ 30 декабря 2010

Я прочитал заявления людей из 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

Я легко могу представить, что рецепт создания словарей сериализации не верен, я не читал учебник.Кто-нибудь случайно знает?

ОБНОВЛЕНИЕ

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

...