Нужно добавить метод в класс JAXB. Как? Или я должен?

Я использую JAXB для создания POJO из WADL xsd. Я скачал xsd напрямую с W3C. Однако я бы хотел, чтобы у одного из моих POJO был вспомогательный метод, который позволял бы мне рекурсивно проходить через него, например:

public Stream<WadlResource> flattenPath() {
    return Stream.concat(
        Stream.of(this), 
        this.methodOrResource.stream()
                .filter(WadlResource.class::isInstance)
                .map(WadlResource.class::cast)
                .flatMap(WadlResource::flattenPath) // recursion here
            );
}

Обратите внимание на использование this. Этот метод - единственный способ рекурсии с потоком, который я видел.

Итак, мой вопрос: как добавить этот метод, чтобы он генерировался вместе с xsd? Это хорошая практика? Или я должен просто сгенерировать код один раз, добавить метод и проверить его в моем репо (что НЕ похоже на хорошую практику). ТИА!


person CNDyson    schedule 07.03.2018    source источник


Ответы (1)


Это хорошая практика?

Это субъективно. Обычно я этого не делаю. Я предпочитаю, чтобы классы, производные от схемы, были простыми DTO без какой-либо бизнес-логики.

Как добавить этот метод, чтобы он генерировался вместе с xsd?

Вы можете вводить код с помощью плагина Code Injector. См. следующий вопрос:

Вставка кода с помощью XJC+xsd+jxb с использованием параметров - Xinject-код-расширение

person lexicore    schedule 07.03.2018
comment
Спасибо, но знаете ли вы, как бы я переписал свой рекурсивный метод в служебном классе? - person CNDyson; 07.03.2018
comment
@ user1660256 Вы рекурсивно вызываете метод служебного класса. Это другой вопрос, пожалуйста, задайте его отдельно. - person lexicore; 07.03.2018