Проблемы с использованием обычного анализатора для анализа выходных данных XML Subversion

Форматированный вывод Subversion XML представляет собой комбинацию атрибута и элементов, особенно в <path> элемент - см. образец ниже:

<?xml version="1.0" encoding="UTF-8"?>
<log>
<logentry
   revision="29">
<author>bob</author>
<date>2013-02-14T17:21:42.848605Z</date>
<paths>
<path
   action="A"
   kind="dir"
   copyfrom-path="/trunk"
   copyfrom-rev="28">/tags/TAG-0.1</path>
</paths>
<msg>Creating tag TAG-0.1</msg>
</logentry>
</log>

Я пытаюсь использовать общий анализатор для анализа содержимого журнала в двух разных POJO (LogEntry и Path), используя следующее:

ArrayList<LogEntry> logEntries = new ArrayList<LogEntry>();
    digester.push(logEntries);

    digester.addObjectCreate("*/logentry", LogEntry.class);
    digester.addSetProperties("*/logentry");
    digester.addBeanPropertySetter("*/logentry/author");
    digester.addBeanPropertySetter("*/logentry/date");
    digester.addBeanPropertySetter("*/logentry/msg");
    digester.addSetNext("*/logentry", "add");

    digester.addObjectCreate("*/logentry/paths/path", Path.class);    
    digester.addSetProperties("*/logentry/paths/path");
    digester.addBeanPropertySetter("*/logentry/paths/path", "value");
    digester.addSetNext("*/logentry/paths/path", "addPath");

(обратите внимание, что addPath добавляет созданный объект пути к ArrayList<Path> внутри созданного объекта LogEntry)

Я не могу понять, почему класс Path не заполняется полностью. Основываясь на XML, я могу понять, почему copyfrom-rev а также copyfrom-path атрибуты могут не копироваться (из-за дефиса) в соответствующие атрибуты copyFromRev.

Но я не вижу никакой причины, почему kind атрибут не устанавливается в пути.

У кого-нибудь есть какие-либо идеи?

1 ответ

Мне нужно использовать digester.addSetProperties() позвонить, чтобы получить copyfrom-path а также copyfrom-rev атрибуты заполнены:

digester.addSetProperties("*/logentry/paths/path", "copyfrom-path", "copyfrompath");
digester.addSetProperties("*/logentry/paths/path", "copyfrom-rev", "copyfromrev");

Однако по какой-то причине атрибут kind все еще не заполняется.

Другие вопросы по тегам