powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Digester и коллекции
6 сообщений из 6, страница 1 из 1
Digester и коллекции
    #38415775
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, коллеги!

Есть следующий xml документ.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<?xml version='1.0'?>
<resp>
  <collection>
     <elem>
      <par1>1</par1>
      <par2>2</par2>
     <elem>
     <elem>
      <par1>1</par1>
      <par2>2</par2>
     <elem>
   </collection>
   <errorSection>
      <code>0</code>
      <message></message>
   </errorSection>
</resp>



Его надо разобрать c использованием Digester и вернуть следующий bundle:

Код: 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.
46.
47.
48.
49.
50.
    class elem{
        private String par1;
        private String par2;

        public String getPar1() {
            return par1;
        }

        public void setPar1(String par1) {
            this.par1 = par1;
        }

        public String getPar2() {
            return par2;
        }

        public void setPar2(String par2) {
            this.par2 = par2;
        }
    }

    class bundle{
        private List<elem> elem;
        private String errorCode;
        private String message;

        public List<DigesterTest.elem> getElem() {
            return elem;
        }

        public void setElem(List<DigesterTest.elem> elem) {
            this.elem = elem;
        }

        public String getErrorCode() {
            return errorCode;
        }

        public void setErrorCode(String errorCode) {
            this.errorCode = errorCode;
        }

        public String getMessage() {
            return message;
        }

        public void setMessage(String message) {
            this.message = message;
        }
    }



Тег <collection> может быть пустой. А коды ошибок есть всегда и их надо проверять обязательно.

Уже два часа бьюсь над конфигурированием rules для Digester чтобы его разобрать.
Подскажите кто в Дайджестере опытный. А я минут через 30 приведу свой юнит тест
когда подчищу его до состояния приличного для публикации.

Спасибо.
...
Рейтинг: 0 / 0
Digester и коллекции
    #38415804
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то я вообще не врублюсь в чем вообще могуть быть сложности. Digester использую раз в 3 года наверное. Там немыслимое можно замапить. А тут вроде всё прямо и перепендикулярно без излишеств.
...
Рейтинг: 0 / 0
Digester и коллекции
    #38415833
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как сослаться на только что созданый инстанс elem И добавить его в коллекцию?
...
Рейтинг: 0 / 0
Digester и коллекции
    #38415842
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот тут куча примеров, в том числе для коллекций.
http://wiki.apache.org/commons/Digester/FAQ
...
Рейтинг: 0 / 0
Digester и коллекции
    #38415919
zalexaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Код: 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.
        digester.addFactoryCreate("resp",
                new AbstractObjectCreationFactory() {
                    public bundle createObject(Attributes attributes) throws Exception {
                        return new bundle();
                    }
                }
        );

        digester.addBeanPropertySetter("resp/errorSection/code", "errorCode");
        digester.addBeanPropertySetter("resp/errorSection/message", "message");

        digester.addObjectCreate("resp/collection", ArrayList.class);
        digester.addSetNext("resp/collection", "setElem");

        digester.addFactoryCreate("resp/collection/elem",
                new AbstractObjectCreationFactory() {
                    public elem createObject(Attributes attributes) throws Exception {
                        return new elem();
                    }
                }
        );

        digester.addBeanPropertySetter("resp/collection/elem/par1", "par1");
        digester.addBeanPropertySetter("resp/collection/elem/par2", "par2");
        digester.addSetNext("resp/collection/elem", "add");

        bundle bundle = digester.parse(getClass().getResource("test.xml"));


извраты с factory из-за вложенных классов elem и bundle, для обычных случаев просто замените на
Код: java
1.
2.
digester.addObjectCreate("resp", bundle.class);
digester.addObjectCreate("resp/collection/elem", elem.class);
...
Рейтинг: 0 / 0
Digester и коллекции
    #38415943
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОК. Спасибо за пример.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Digester и коллекции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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