Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Digester и коллекции / 6 сообщений из 6, страница 1 из 1
03.10.2013, 16:19:41
    #38415775
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Digester и коллекции
Добрый день, коллеги!

Есть следующий 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
03.10.2013, 16:32:17
    #38415804
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Digester и коллекции
Что-то я вообще не врублюсь в чем вообще могуть быть сложности. Digester использую раз в 3 года наверное. Там немыслимое можно замапить. А тут вроде всё прямо и перепендикулярно без излишеств.
...
Рейтинг: 0 / 0
03.10.2013, 16:40:18
    #38415833
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Digester и коллекции
Как сослаться на только что созданый инстанс elem И добавить его в коллекцию?
...
Рейтинг: 0 / 0
03.10.2013, 16:47:13
    #38415842
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Digester и коллекции
Вот тут куча примеров, в том числе для коллекций.
http://wiki.apache.org/commons/Digester/FAQ
...
Рейтинг: 0 / 0
03.10.2013, 17:27:30
    #38415919
zalexaka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Digester и коллекции
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
03.10.2013, 17:41:48
    #38415943
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Digester и коллекции
ОК. Спасибо за пример.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Digester и коллекции / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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