powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Java [игнор отключен] [закрыт для гостей] / Быстрый маппинг FB2=>JavaObject
49 сообщений из 49, показаны все 2 страниц
Быстрый маппинг FB2=>JavaObject
    #39807947
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наиболее быстрый маппинг между 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
Быстрый маппинг FB2=>JavaObject
    #39807957
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНаиболее быстрый маппинг
по какому критерию? временя выполнения, расход памяти или ...уяк-...уяк и в продакшн :)

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

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

Продакшена нет. Это - песочница. Но если она будет грузить документы 3 суток - нахер-нахер
...
Рейтинг: 0 / 0
Быстрый маппинг FB2=>JavaObject
    #39807964
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Быстрый маппинг FB2=>JavaObject
    #39808053
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почитал про XStream http://x-stream.github.io/index.html

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

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

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

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

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

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

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

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

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

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

сделай фасад, выложи проект, расшарь его нам) мы допишем, перехватим твою идею и продадим!
...
Рейтинг: 0 / 0
Быстрый маппинг FB2=>JavaObject
    #39808255
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это будет прелестно. Я не против.
...
Рейтинг: 0 / 0
Быстрый маппинг FB2=>JavaObject
    #39808398
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм... мне еще и быстрый JSon конвертер понадобится. Обычно я юзал гугловый GSon и какой-то fasterxml.jackson.
Но быстрые он или нет - хрен ево знает. Поищу бенчмарки.
...
Рейтинг: 0 / 0
Быстрый маппинг FB2=>JavaObject
    #39808452
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНо быстрые он или нет - хрен ево знает
там примерно такая же ситуация. чем более низкоуровнево, тем быстрее. чем более удобно и декларативно, тем медленнее.
...
Рейтинг: 0 / 0
Быстрый маппинг FB2=>JavaObject
    #39808464
Фотография 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();
    }
}



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

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



Вот эта штука movies - это по идее название текстового индекса. Его я должен по протоколу сначала создать отдельной
командой Кибаны. Еще не придумал как это всё завязать в последовательность действий.
...
Рейтинг: 0 / 0
Быстрый маппинг FB2=>JavaObject
    #39808479
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну там не мувис понятное дело а books.
...
Рейтинг: 0 / 0
Быстрый маппинг FB2=>JavaObject
    #39808499
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton270 Гигов zip-архивов
- если не сложно, поделитесь ссылочкой)
...
Рейтинг: 0 / 0
Быстрый маппинг FB2=>JavaObject
    #39808508
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рутрекер. В поиске: Флибуста.
...
Рейтинг: 0 / 0
Быстрый маппинг FB2=>JavaObject
    #39808617
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кажется вот этот линк https://rutracker.org/forum/viewtopic.php?t=5462398
...
Рейтинг: 0 / 0
Быстрый маппинг FB2=>JavaObject
    #39808799
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Быстрый маппинг FB2=>JavaObject
    #39808801
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. Промежуточная фаза Java-object мне 100% нужна. Возможно надо будет втолкнуть объект Книга
не в Elastic-endpoint а в какую-нибудь SQLite.
...
Рейтинг: 0 / 0
Быстрый маппинг FB2=>JavaObject
    #39808806
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не проще взять xml schema fb2 формат и через мавен/gradle плагин нагенерить по ней модельки ?

или могут быть нестандартные теги ?
...
Рейтинг: 0 / 0
Быстрый маппинг FB2=>JavaObject
    #39808812
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lleming, это мысль. Дайте больше ключевых слов. Как называется этот плагин которые сделат мне модельки.

И потом по ссылке выше http://www.fictionbook.org/index.php/Документы представлен аж целый список форматов.

Тоесть я буду озабочен новой задачей. Детектировать собственно версию документа. Это как?
Применять к документу все модели последовательно? Пока не возникнет Exception?
...
Рейтинг: 0 / 0
Быстрый маппинг FB2=>JavaObject
    #39808929
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чорт бы подрал этот Стакс. Говно-говняцкое вышло.

Я уже думаю что идея использовать Dom не так плоха. По крайней мере рутину пока отодвину.
Останется перформанс но это можно потом довести.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
    @Override
    public Fb2Document apply(InputStream inputStream) {
        XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
        XMLEventReader xmlEventReader = null;
        Fb2Document document = new Fb2Document();
        try {
            xmlEventReader = xmlInputFactory.createXMLEventReader(inputStream);
            while (xmlEventReader.hasNext()) {
                XMLEvent event = xmlEventReader.nextEvent();
                if (event.isStartElement()) {
                    StartElement startElement = event.asStartElement();
                    String localPart = startElement.getName().getLocalPart();

                    if (localPart.equals("description")) {
                        ......
                    }

                    if (localPart.equals("first-name")) {
                        logger.info("::[1] first-name");
                        while(!event.isCharacters()){
                            event = xmlEventReader.nextEvent();
                        }
                        logger.info("event.asCharacters().getData() = '{}'", event.asCharacters().getData());
                        document.setAuthor(event.asCharacters().getData());
                    }

...
Рейтинг: 0 / 0
Быстрый маппинг FB2=>JavaObject
    #39809163
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЯ уже думаю что идея использовать Dom не так плоха.
Особенно если проект для поигрушек.

JAXB содержит в себе инструменты для генерации классов по XSD. Другие либы тоже иногда так могут. И для пет-прожектов на производительность обычно плевать, поэтому генерим классы и по быстрому получаем результат.
...
Рейтинг: 0 / 0
Быстрый маппинг FB2=>JavaObject
    #39809165
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДетектировать собственно версию документа. Это как?
Это значит прочитать в файле некий ключ. Обычное чтение из потока с этим легко справится. Быстро и несложно.
...
Рейтинг: 0 / 0
Быстрый маппинг FB2=>JavaObject
    #39809336
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex55555maytonЯ уже думаю что идея использовать Dom не так плоха.
Особенно если проект для поигрушек.

JAXB содержит в себе инструменты для генерации классов по XSD. Другие либы тоже иногда так могут. И для пет-прожектов на производительность обычно плевать, поэтому генерим классы и по быстрому получаем результат.
Это мысль. Я попробую с помощью тулза xjc нагенерить API.
...
Рейтинг: 0 / 0
Быстрый маппинг FB2=>JavaObject
    #39809367
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм... я чудесным образом ее снес или сломал.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
# xjc

Command 'xjc' not found, but can be installed with:

apt install openjdk-11-jdk-headless
apt install openjdk-8-jdk-headless 

# apt install openjdk-11-jdk-headless 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
openjdk-11-jdk-headless is already the newest version (11.0.2+9-3ubuntu1~18.04.3).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
...
Рейтинг: 0 / 0
Быстрый маппинг FB2=>JavaObject
    #39809370
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И чего это они через пень-колоду... Через 2 уровня симлинков протащили. Странный вариант поставлять
продукт. Ну ладно. Вобщем JDK какая-то урезанная. Что-то есть. Чего-то нет.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
root@mayton-HP-250-G4-Notebook-PC:~# 
root@mayton-HP-250-G4-Notebook-PC:~# whereis xjc
xjc: /usr/bin/xjc /usr/share/man/man1/xjc.1.gz
root@mayton-HP-250-G4-Notebook-PC:~# ls -l /usr/bin/xjc 
lrwxrwxrwx 1 root root 21 May 26  2018 /usr/bin/xjc -> /etc/alternatives/xjc
root@mayton-HP-250-G4-Notebook-PC:~# ls -l /etc/alternatives/xjc
lrwxrwxrwx 1 root root 42 Jun 25  2018 /etc/alternatives/xjc -> /usr/lib/jvm/java-11-openjdk-amd64/bin/xjc
root@mayton-HP-250-G4-Notebook-PC:~# ls -l /usr/lib/jvm/java-11-openjdk-amd64/bin/xjc
ls: cannot access '/usr/lib/jvm/java-11-openjdk-amd64/bin/xjc': No such file or directory
root@mayton-HP-250-G4-Notebook-PC:~# 
root@mayton-HP-250-G4-Notebook-PC:~# ls -1 /usr/lib/jvm/java-11-openjdk-amd64/bin
jaotc
jar
jarsigner
java
javac
javadoc
javap
jcmd
jconsole
jdb
jdeprscan
jdeps
jhsdb
jimage
jinfo
jjs
jlink
jmap
jmod
jps
jrunscript
jshell
jstack
jstat
jstatd
keytool
pack200
rmic
rmid
rmiregistry
serialver
unpack200
...
Рейтинг: 0 / 0
Быстрый маппинг FB2=>JavaObject
    #39809377
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Двенадцатка такая-же коцаная.

Вобщем приблизительное решение моей беды описано здесь https://www.jesperdj.com/2018/09/30/jaxb-on-java-9-10-11-and-beyond/

Всё пошел спать. Всем спасибо.
...
Рейтинг: 0 / 0
Быстрый маппинг FB2=>JavaObject
    #39809424
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
могу ошибаться но вроде начиная с 9 версии всякую аля jee хрень выпилили из jdk
...
Рейтинг: 0 / 0
Быстрый маппинг FB2=>JavaObject
    #39809425
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По самой первой ссылке в начале топика можно качнуть 4 файла.

Код: java
1.
2.
3.
4.
05/02/2019  07:54 PM            34,541 FictionBook.xsd
05/02/2019  07:54 PM             8,169 FictionBookGenres.xsd
05/02/2019  07:54 PM               480 FictionBookLang.xsd
05/02/2019  07:54 PM               642 FictionBookLinks.xsd



Щас я временно на другой конфигурации. Win10+JDK8.

Пока - неудача. Три файла сгенерировали варнинг локации. И один - что-то непонятно. Надо разбираться.

Скрипт
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
@echo on

prompt $p$g

java -version

xjc -p mayton -verbose -d . FictionBook.xsd

echo "%ERRORLEVEL%"

xjc -p mayton -verbose -d . FictionBookGenres.xsd

echo "%ERRORLEVEL%"

xjc -p mayton -verbose -d . FictionBookLang.xsd

echo "%ERRORLEVEL%"

xjc -p mayton -verbose -d . FictionBookLinks.xsd

echo "%ERRORLEVEL%"



Лог.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
prompt $p$g 

java -version 

xjc -p mayton -verbose -d . FictionBook.xsd 
parsing a schema...
[ERROR] cos-element-consistent: Error for type '#AnonType_FictionBook'. Multiple elements with name 'body', with different types, appear in the model group.
  line 75 of file:/C:/Users/mayton/git/XSD/FictionBook.xsd

Failed to parse a schema.

echo "-1" 
"-1"

xjc -p mayton -verbose -d . FictionBookGenres.xsd 
parsing a schema...
compiling a schema...
[INFO] generating code
unknown location

mayton\GenreType.java
mayton\ObjectFactory.java

echo "0" 
"0"

xjc -p mayton -verbose -d . FictionBookLang.xsd 
parsing a schema...
compiling a schema...
[INFO] generating code
unknown location


echo "0" 
"0"

xjc -p mayton -verbose -d . FictionBookLinks.xsd 
parsing a schema...
compiling a schema...
[INFO] generating code
unknown location


echo "0" 
"0"



Успешно отработал только справочник жанров (FictionBookGenres). Был сгенерировано 2 сущности.
Все остально проигнорировано.
...
Рейтинг: 0 / 0
Быстрый маппинг FB2=>JavaObject
    #39809426
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. Спул java -version попал в поток ошибок.

Код: java
1.
2.
3.
java version "1.8.0_192"
Java(TM) SE Runtime Environment (build 1.8.0_192-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.192-b12, mixed mode)
...
Рейтинг: 0 / 0
Быстрый маппинг FB2=>JavaObject
    #39809452
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonУспешно отработал только справочник жанров (FictionBookGenres). Был сгенерировано 2 сущности.
Все остально проигнорировано.
Успешны все, кроме первой схемы. Видимо в последних двух какие-то специфические фичи объявлены, не мапятся на классы. А в первой схеме два разных элемента body - схема некошерная.
...
Рейтинг: 0 / 0
Быстрый маппинг FB2=>JavaObject
    #39809466
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в чем успех если ничего не сгенерировано? Утилита молча отработала. Выхода нет.
...
Рейтинг: 0 / 0
Быстрый маппинг FB2=>JavaObject
    #39809547
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм... по идее FictionBook это родительский документ. Все остальные в него включены. Наверное правильный путь - это
собрать его.

Код: xml
1.
2.
3.
    <xs:import namespace="http://www.w3.org/1999/xlink"                       schemaLocation="FictionBookLinks.xsd"/>
    <xs:import namespace="http://www.gribuser.ru/xml/fictionbook/2.0/genres"  schemaLocation="FictionBookGenres.xsd"/>
    <xs:import namespace="http://www.w3.org/XML/1998/namespace"               schemaLocation="FictionBookLang.xsd"/>
...
Рейтинг: 0 / 0
Быстрый маппинг FB2=>JavaObject
    #39809551
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выкинул 99% контента из главного документа. Оставил только теги stylesheet, binary. Работает. ДжаксБи сгенерил мне сущность
FictionBook и справочник GenreType.

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
    <xs:element name="FictionBook">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="stylesheet" minOccurs="0" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:simpleContent>
                            <xs:extension base="xs:string">
                                <xs:attribute name="type" type="xs:string" use="required"/>
                            </xs:extension>
                        </xs:simpleContent>
                    </xs:complexType>
                </xs:element>
                <xs:element name="binary" minOccurs="0" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:simpleContent>
                            <xs:extension base="xs:base64Binary">
                                <xs:attribute name="content-type" type="xs:string" use="required"/>
                                <xs:attribute name="id" type="xs:ID" use="required"/>
                            </xs:extension>
                        </xs:simpleContent>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>



Дальнейше направление мне ясно. Такими мелкики шажками можно добить этот Fb2 mapper. Вот только не хочется залипнуть
на неделю.

Кто знаток jaxb и кто возьмётся пофиксить эту рутину? Буду респектовать.
...
Рейтинг: 0 / 0
Быстрый маппинг FB2=>JavaObject
    #39809556
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вроде пару мест всего нужно пофиксить, надеюсь идея понятна
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
<build>
        <plugins>                       
            <plugin>
                <groupId>org.jvnet.jaxb2.maven2</groupId>
                <artifactId>maven-jaxb2-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <args>
                        <arg>-npa</arg>
                    </args>
                    <schemaDirectory>${basedir}/src/main/resources/xsd</schemaDirectory>
                    <schemaIncludes>
                        <include>FictionBook.xsd</include>
                    </schemaIncludes>
                    <bindingIncludes>
                        <include>bindings.xjb</include>
                    </bindingIncludes>
                    <generatePackage>com.test.fb2</generatePackage>
                    <removeOldOutput>true</removeOldOutput>
                </configuration>
            </plugin>
        </plugins>
    </build>
...
Рейтинг: 0 / 0
Быстрый маппинг FB2=>JavaObject
    #39809557
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
З.Ы. по приатаченным схемам классы генерятся, саму де-сериализацию уже не проверял
...
Рейтинг: 0 / 0
Быстрый маппинг FB2=>JavaObject
    #39809560
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha , спасибо большое. Вот этот биндинг файл мне был и нужен. А сборка проекта у меня на основе градла.

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
<bindings xmlns="http://java.sun.com/xml/ns/jaxb"
          xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
          xmlns:xs="http://www.w3.org/2001/XMLSchema"
          version="2.1">
    <bindings schemaLocation="FictionBook.xsd" version="1.0">
        <!-- Customise the package name -->
        <!--<schemaBindings>
            <package name="com.example.schema"/>
        </schemaBindings>-->

        <bindings node="//xs:complexType[@name='dateType']">
            <bindings node=".//xs:attribute[@name='value']">
                <property name="DateTypeValue"/>
            </bindings>
        </bindings>

        <bindings node="//xs:complexType[@name='linkType']">
            <bindings node=".//xs:attribute[@ref='xlink:type']">
                <property name="XlinkType"/>
            </bindings>
        </bindings>

    </bindings>
</bindings>



Поэтму я пока оставлю свой баш скриптик.

Код: java
1.
2.
3.
#!/usr/bin/env bash

xjc -p mayton.elastic.xsd -verbose -d ../../java -b binding.xjb FictionBook.xsd
...
Рейтинг: 0 / 0
Быстрый маппинг FB2=>JavaObject
    #39809705
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА в чем успех если ничего не сгенерировано?
В отсутствии ошибок.

Надо смотреть, что там внутри и как оно вяжется с основной схемой. Далее надо понять, поддерживает ли генератор такой тип связей.

В общем надо подробно разбираться со схемой и JAXB, убить часик-другой.
...
Рейтинг: 0 / 0
Быстрый маппинг FB2=>JavaObject
    #39812666
kolchanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО гораздо проще работать с INPX файлом коллекции, а не парсить fb2 файлы, если конечно, работа с fb2 не является самоцелбю.
...
Рейтинг: 0 / 0
Быстрый маппинг FB2=>JavaObject
    #39812677
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolchanovИМХО гораздо проще работать с INPX файлом коллекции, а не парсить fb2 файлы, если конечно, работа с fb2 не является самоцелбю.
По INPX я ничего релевантного не нахожу. Можете прояснить этот термин?
...
Рейтинг: 0 / 0
Быстрый маппинг FB2=>JavaObject
    #39812684
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonkolchanovИМХО гораздо проще работать с INPX файлом коллекции, а не парсить fb2 файлы, если конечно, работа с fb2 не является самоцелбю.
По INPX я ничего релевантного не нахожу. Можете прояснить этот термин?
- погуглил за тебя: INPX
...
Рейтинг: 0 / 0
Быстрый маппинг FB2=>JavaObject
    #39812689
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalovmaytonпропущено...

По INPX я ничего релевантного не нахожу. Можете прояснить этот термин?
- погуглил за тебя: INPX
Дружище. Я не понимаю как это мне поможет?
...
Рейтинг: 0 / 0
Быстрый маппинг FB2=>JavaObject
    #39812695
kolchanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Ну как, это описание формата внутри zip файла, в котором находится структурированная информация по каждой книге.
Парсить эту структуру на несколько порядков проще и быстрее чем все fb2 файлы
Скачать актуальную версию для флибусты можно тут
https://booktracker.org/viewtopic.php?t=64690


Contains book description. One per line. Line delimiter - \r\n. Line fileds should be the same as in structure.info except delimiter is 0x04 instead of ;. Field can be empty, i.e. have zero length.

Fields description:

AUTHOR string

One or more authors in format Surname,Name,Middlename: without spaces.

GENRE string

One or more genres in format genre_id:. Can be found in Genres.cs.

TITLE string

Book title.

SERIES string

Book series.

SERNO integer

Book number in series.

FILE string

Filename without extension.

SIZE integer

File size in bytes.

LIBID integer

Book id in library. Likely to be unique across one .inpx file.

DEL integer?

Empty - book is present. 1 - book is deleted.

EXT string

File extension without front dot.

DATE string

Date of book publication or adding to library. Should be in format YYYY-MM-DD.

LANG string

Book's language. en, ru, etc...

KEYWORDS string

Format keyword:.

FOLDER string

Folder relative to library root. (this one isn't implemented yet in DotOPDS)

Example:

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


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