Гость
Форумы / Java [игнор отключен] [закрыт для гостей] / Быстрый маппинг FB2=>JavaObject / 25 сообщений из 49, страница 1 из 2
29.04.2019, 21:02
    #39807947
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый маппинг FB2=>JavaObject
Наиболее быстрый маппинг между XML(FB2) форматом электронной книги. Как?

Сама спецификация описана здесь http://www.fictionbook.org/index.php/Документы

Образец книжки я - приаттачиваю.

Из того что я разработал нет пока что нифига. Только вот такой кусок.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
@XmlRootElement(name = "FictionBook")
public class FictionBook {

    private Description description;

    private Body body;

}


Дальнейшее - под вопросом.

Давно я этим XML не занимался. Последний раз использовал Apache Digester и Stax ( в сыром виде. Тоесть в виде
хендлера событий. Оба способа кажутся мне не очень удобными с точки зрения внесения изменений.
Некто Баелдунг предлагает аж 8(!) способов замапить XML на объекты.
https://www.baeldung.com/java-xml
Сомнительно что я успею опробовать все.

Ищу нечто очень быстрое наподобие SAX/Stax но более удобное в разработке.
Есть надежда что JAXB мне подойдет. Но очень не хотелось-бы иметь под капотом XMLDocument.
...
Рейтинг: 0 / 0
29.04.2019, 21:15
    #39807957
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый маппинг FB2=>JavaObject
maytonНаиболее быстрый маппинг
по какому критерию? временя выполнения, расход памяти или ...уяк-...уяк и в продакшн :)

maytonНекто Баелдунг предлагает аж 8
бери любое из того, что больше нравится/подходит. так-то на github и готовые парсеры есть, но качество под вопросом.
...
Рейтинг: 0 / 0
29.04.2019, 21:18
    #39807960
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый маппинг FB2=>JavaObject
chpashamaytonНаиболее быстрый маппинг
по какому критерию? временя выполнения, расход памяти или ...уяк-...уяк и в продакшн :)

По времени выполнения.

Продакшена нет. Это - песочница. Но если она будет грузить документы 3 суток - нахер-нахер
...
Рейтинг: 0 / 0
29.04.2019, 21:20
    #39807964
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый маппинг FB2=>JavaObject
chpashamaytonНекто Баелдунг предлагает аж 8
бери любое из того, что больше нравится/подходит. так-то на github и готовые парсеры есть, но качество под вопросом.
Взял JAXB пока. Напрягает то что в ебуках встречаются namespaces. С ними - вечно какие-то неоднозначности.
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<?xml version="1.0" encoding="utf-8"?>
<FictionBook xmlns:l="http://www.w3.org/1999/xlink" xmlns="http://www.gribuser.ru/xml/fictionbook/2.0">
    <description>
        <title-info>
            <genre>sf</genre>
            <author>
                <first-name>Александр</first-name>
                <middle-name>Николаевич</middle-name>
                <last-name>Громов</last-name>
                <id>e55c8f77-2a80-102a-9ae1-2dfe723fe7c7</id>
            </author>
...
Рейтинг: 0 / 0
30.04.2019, 00:36
    #39808053
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый маппинг FB2=>JavaObject
Почитал про XStream http://x-stream.github.io/index.html

В целом понравилось. Быстрая.

Повисли вопросы? Маппинг в специфичные имена тегов? Как?

Код: xml
1.
"title-info", "document-info"
...
Рейтинг: 0 / 0
30.04.2019, 09:36
    #39808152
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый маппинг FB2=>JavaObject
maytonПродакшена нет. Это - песочница. Но если она будет грузить документы 3 суток - нахер-нахер

Поскольку размер любого файла FB2 не превышает нескольких МБ, то при любом способе будет загружаться не более чем за секунды и расходовать не более десятков мегабайт памяти.
...
Рейтинг: 0 / 0
30.04.2019, 09:37
    #39808153
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый маппинг FB2=>JavaObject
mayton,
там есть достаточная документация.
...
Рейтинг: 0 / 0
30.04.2019, 10:27
    #39808184
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый маппинг FB2=>JavaObject
Partisan MmaytonПродакшена нет. Это - песочница. Но если она будет грузить документы 3 суток - нахер-нахер

Поскольку размер любого файла FB2 не превышает нескольких МБ, то при любом способе будет загружаться не более чем за секунды и расходовать не более десятков мегабайт памяти.
Да мне не жалко памяти. 270 Гигов zip-архивов.
Просто хочется чтоб процессинг прошёл быстрее. Возможно будут читать в несколько потоков.

За вчерашний день я нарисовал для себя шпаргалку по 8 XML-технологиям. Опробовал 4 штуки.
Пока в фаворе остается Stax. Возможно на нем и будут всё делать. В простейшем случае
буду игнорировать неизвестные теги. Индексировать собственно есть интерес только такие
поля как Автор, Название, и собственно тело текста.
...
Рейтинг: 0 / 0
30.04.2019, 10:48
    #39808199
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый маппинг FB2=>JavaObject
Если кратко, то для разбора XML используются библиотеки, работающие с DOM, или с потоком данных (stream parser) или вызов XSLT скрипта. Для крупного XML файла, состоящего из большого количества записей простой структуры, больше подходят stream parser-ы,которые делятся на StAX и SAX (спецификации). StAX несколько проще в использовании.

Можно рассмотреть библиотеку FasterXML Jackson, поддерживающую разные методы работы с XML (и JSON), в том числе работу как StAX-parser (которая реализована дополнительной библиотекой Woodstox, к которой обращается Jackson).
...
Рейтинг: 0 / 0
30.04.2019, 10:50
    #39808202
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый маппинг FB2=>JavaObject
Partisan M, нет нет. С DOM я не хочу связываться. Я с ним имел дело еще в 2000х.
Это овер-проектирование для меня.

FasterXML Jackson
Вот это хорошая тема. Почитаю.
...
Рейтинг: 0 / 0
30.04.2019, 10:50
    #39808203
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый маппинг FB2=>JavaObject
mayton,

XFire тоже подойдёт.
...
Рейтинг: 0 / 0
30.04.2019, 11:26
    #39808227
alex55555
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый маппинг FB2=>JavaObject
maytonНаиболее быстрый маппинг между XML(FB2) форматом электронной книги. Как?
Перебирая мапперы.

То есть когда хочется точно взять инфу из xml, то возникают нюансы, которые разные мапперы по разному обходят. Ну и надо выбрать, что там больше нравится в плане точности отображения.
...
Рейтинг: 0 / 0
30.04.2019, 12:09
    #39808246
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый маппинг FB2=>JavaObject
Чтоб быть честным я попробую реализовать хотя-бы 2 streamable маппера за фасадом своего приложения.
И сделаю минимум 2 бенчмарка. Будет StaxFb2Mapper + еще один неизвестный из серии таких-же быстрых.
...
Рейтинг: 0 / 0
30.04.2019, 12:13
    #39808249
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый маппинг FB2=>JavaObject
maytonЧтоб быть честным я попробую реализовать хотя-бы 2 streamable маппера за фасадом своего приложения.
И сделаю минимум 2 бенчмарка. Будет StaxFb2Mapper + еще один неизвестный из серии таких-же быстрых.

сделай фасад, выложи проект, расшарь его нам) мы допишем, перехватим твою идею и продадим!
...
Рейтинг: 0 / 0
30.04.2019, 12:21
    #39808255
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый маппинг FB2=>JavaObject
Это будет прелестно. Я не против.
...
Рейтинг: 0 / 0
30.04.2019, 16:18
    #39808398
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый маппинг FB2=>JavaObject
Хм... мне еще и быстрый JSon конвертер понадобится. Обычно я юзал гугловый GSon и какой-то fasterxml.jackson.
Но быстрые он или нет - хрен ево знает. Поищу бенчмарки.
...
Рейтинг: 0 / 0
30.04.2019, 17:29
    #39808452
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый маппинг FB2=>JavaObject
maytonНо быстрые он или нет - хрен ево знает
там примерно такая же ситуация. чем более низкоуровнево, тем быстрее. чем более удобно и декларативно, тем медленнее.
...
Рейтинг: 0 / 0
30.04.2019, 17:47
    #39808464
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый маппинг FB2=>JavaObject
Вот буквально 5 минут назад запилил. На Джаксоне.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
package mayton.elastic;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
import java.io.IOException;

public class Fb2Serializer extends StdSerializer<Fb2Document> {

    protected Fb2Serializer(Class<Fb2Document> t) {
        super(t);
    }

    @Override
    public void serialize(Fb2Document fb2Document, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        jsonGenerator.writeStartObject();
        // TODO: Generalize constants
        jsonGenerator.writeStringField("author", fb2Document.getAuthor());
        jsonGenerator.writeStringField("title", fb2Document.getTitle());
        jsonGenerator.writeStringField("body", fb2Document.getBody());
        jsonGenerator.writeEndObject();
    }
}



В Кибану должный пойти put-реквесты в таком формате HTTP. Там соотв. формат полей - произвольный.

Код: sql
1.
2.
3.
4.
5.
6.
PUT movies/Epic/2 
{
    "author" : "S.Lukyanenko",
    "title" : "Dozor",
    "body" : "....."
}



Вот эта штука movies - это по идее название текстового индекса. Его я должен по протоколу сначала создать отдельной
командой Кибаны. Еще не придумал как это всё завязать в последовательность действий.
...
Рейтинг: 0 / 0
30.04.2019, 18:00
    #39808479
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый маппинг FB2=>JavaObject
Ну там не мувис понятное дело а books.
...
Рейтинг: 0 / 0
30.04.2019, 18:33
    #39808499
Kachalov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый маппинг FB2=>JavaObject
mayton270 Гигов zip-архивов
- если не сложно, поделитесь ссылочкой)
...
Рейтинг: 0 / 0
30.04.2019, 18:44
    #39808508
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый маппинг FB2=>JavaObject
Рутрекер. В поиске: Флибуста.
...
Рейтинг: 0 / 0
01.05.2019, 00:07
    #39808617
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый маппинг FB2=>JavaObject
Кажется вот этот линк https://rutracker.org/forum/viewtopic.php?t=5462398
...
Рейтинг: 0 / 0
01.05.2019, 13:29
    #39808799
alex55555
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый маппинг FB2=>JavaObject
maytonВот буквально 5 минут назад запилил. На Джаксоне.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
package mayton.elastic;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
import java.io.IOException;

public class Fb2Serializer extends StdSerializer<Fb2Document> {

    protected Fb2Serializer(Class<Fb2Document> t) {
        super(t);
    }

    @Override
    public void serialize(Fb2Document fb2Document, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        jsonGenerator.writeStartObject();
        // TODO: Generalize constants
        jsonGenerator.writeStringField("author", fb2Document.getAuthor());
        jsonGenerator.writeStringField("title", fb2Document.getTitle());
        jsonGenerator.writeStringField("body", fb2Document.getBody());
        jsonGenerator.writeEndObject();
    }
}




Криво.

В смысле нормальная последовательность такая:

FB2 -> XmlToJava -> POJO -> JavaToJson

И обратно через тот же POJO можно.

То есть один дата-объект и две конвертации, обе заточены (замаплены) на один набор классов.
...
Рейтинг: 0 / 0
01.05.2019, 13:31
    #39808801
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый маппинг FB2=>JavaObject
Да. Промежуточная фаза Java-object мне 100% нужна. Возможно надо будет втолкнуть объект Книга
не в Elastic-endpoint а в какую-нибудь SQLite.
...
Рейтинг: 0 / 0
01.05.2019, 13:36
    #39808806
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый маппинг FB2=>JavaObject
не проще взять xml schema fb2 формат и через мавен/gradle плагин нагенерить по ней модельки ?

или могут быть нестандартные теги ?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Быстрый маппинг FB2=>JavaObject / 25 сообщений из 49, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]