Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Unmarshaling RSS в JAXB и доступ к внутренним nod'ам / 7 сообщений из 7, страница 1 из 1
13.02.2018, 14:49
    #39601170
Anton Romanov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Unmarshaling RSS в JAXB и доступ к внутренним nod'ам
Делаю анмаршелинг RSS-фида. Подсунул его Intelijj IDEA, попросил сделать JAXB-классы из xsd. IDEA сделала что-то подобное:

Код: 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.
@XmlRootElement(name = "rss")
public class Rss {

    public Rss.Channel getChannel() {
        return channel;
    }

// some getters and setters ....

    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "", propOrder = {
        "title",
        "link",
        "description",
        "image",
        "lastBuildDate",
        "item"
    })
    public static class Channel {

        @XmlElement(required = true)
        protected String title;
// another properties ....       
        protected List<Rss.Channel.Item> item;

        public String getTitle() {
            return title;
        }

// another getters and setters ....

        public List<Rss.Channel.Item> getItem() {
            if (item == null) {
                item = new ArrayList<Rss.Channel.Item>();
            }
            return this.item;
        }
// and so on....
}
}



Дальше в неком классе я делаю анмаршелинг из xml с помощью этого jaxb-класса примерно так:

Код: java
1.
2.
3.
4.
JAXBContext jc = JAXBContext.newInstance("com.ar.ya");
Unmarshaller unmarshaller = jc.createUnmarshaller();
File customerXML = new File("src/ya.xml"); //в перспективе это будет стрим с URL
Rss rss = (Rss) JAXBIntrospector.getValue(unmarshaller.unmarshal(customerXML));



В конечном итоге мне нужно выкинуть элементы item в некую- JSP страницу. Но так как channel это вложеный класс, а getItem его локальный метод, я естественно не могу из объектной переменной rss к ним обратиться и в последствии выкидывать каким-то методом его items в цикле куда-то. В консоль или в JSP - не важно. Соответственно вопрос - как лучше в данном случае организовать дизайн, чтобы я мог получить доступ к public List getItem() . На ум приходит только идея сделать еще один метод в обертывающем классе RSS, который будет вызывать его getItem, но как-то мне кажется криво... Заранее всем спасибо!
...
Рейтинг: 0 / 0
13.02.2018, 14:56
    #39601184
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Unmarshaling RSS в JAXB и доступ к внутренним nod'ам
Anton Romanov,

Ничего не понял.

Код: java
1.
2.
Rss rss = ...
List<Rss.Channel.Item> items = rss.getChannel().getItem();


На что именно компилятор ругается?
getChannel() - публичный
getItem() - публичный
Rss.Channel - публичный
...
Рейтинг: 0 / 0
13.02.2018, 15:09
    #39601206
Anton Romanov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Unmarshaling RSS в JAXB и доступ к внутренним nod'ам
авторНичего не понял.

Вот здесь, в отдельном классе я задаю переменную:

Код: java
1.
Rss rss = (Rss) JAXBIntrospector.getValue(unmarshaller.unmarshal(customerXML));



Соответственно у переменной rss доступны методы класса Rss. То есть, например getChannel(). Но методы класса Channel мне не доступны. В частности getItem. То есть вопрос - в этом случае, какое решение наиболее верное чтобы мне обрабатывать item, то есть, говоря другими словами, как лучше получить доступ к вложенным нодам XML. (в данном случае это поля вложенного класса).

Компилятор не ругается. Но ввод в IDE "rss." разумеется не отображает в выпадающем списке метод getItem.
...
Рейтинг: 0 / 0
13.02.2018, 15:21
    #39601222
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Unmarshaling RSS в JAXB и доступ к внутренним nod'ам
Anton RomanovНо методы класса Channel мне не доступны. В частности getItem.
Когда методы класса не доступны, компилятор выдаёт ошибку. Ошибку вы не сообщаете. Судя по коду её быть не должно. А раз ошибки нет, значит вы заблуждаетесь и методы доступны.

Anton RomanovТо есть вопрос - в этом случае, какое решение наиболее верное чтобы мне обрабатывать item, то есть, говоря другими словами, как лучше получить доступ к вложенным нодам XML. (в данном случае это поля вложенного класса).

Вы в поисках решения проблемы, которой нет.

Anton RomanovКомпилятор не ругается.

Вот и я о том же. Может так понятнее будет:
Код: java
1.
2.
3.
Rss rss = (Rss) JAXBIntrospector.getValue(unmarshaller.unmarshal(customerXML));
Rss.Channel channel = rss.getChannel();
List<Rss.Channel.Item> items = channel.getItem();



Anton RomanovНо ввод в IDE "rss." разумеется не отображает в выпадающем списке метод getItem.
Потому что переменная rss имеет тип Rss, а метод getItem() доступен у типа Rss.Channel.
https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
...
Рейтинг: 0 / 0
13.02.2018, 16:12
    #39601267
unregestered
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Unmarshaling RSS в JAXB и доступ к внутренним nod'ам
<c:forEach var="item" value="${requestScope.rss.chanel.item}">
<c:out value="${item.name}"/>
</c:forEach>
...
Рейтинг: 0 / 0
13.02.2018, 16:17
    #39601275
unregestered
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Unmarshaling RSS в JAXB и доступ к внутренним nod'ам
BlazkowiczAnton Romanov,

Ничего не понял.

Код: java
1.
2.
Rss rss = ...
List<Rss.Channel.Item> items = rss.getChannel().getItem();


На что именно компилятор ругается?
getChannel() - публичный
getItem() - публичный
Rss.Channel - публичный

А чо JSP парсеры уже научились понимать синтаксис java 5?
...
Рейтинг: 0 / 0
13.02.2018, 16:33
    #39601283
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Unmarshaling RSS в JAXB и доступ к внутренним nod'ам
Anton Romanov В консоль или в JSP - не важно
unregesteredА чо JSP парсеры уже научились понимать синтаксис java 5?
Вопрос не читай. Сразу пиши ответ.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Unmarshaling RSS в JAXB и доступ к внутренним nod'ам / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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