powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Unmarshaling RSS в JAXB и доступ к внутренним nod'ам
7 сообщений из 7, страница 1 из 1
Unmarshaling RSS в JAXB и доступ к внутренним nod'ам
    #39601170
Anton Romanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Делаю анмаршелинг 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
Unmarshaling RSS в JAXB и доступ к внутренним nod'ам
    #39601184
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton Romanov,

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

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


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

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

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



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

Компилятор не ругается. Но ввод в IDE "rss." разумеется не отображает в выпадающем списке метод getItem.
...
Рейтинг: 0 / 0
Unmarshaling RSS в JAXB и доступ к внутренним nod'ам
    #39601222
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Unmarshaling RSS в JAXB и доступ к внутренним nod'ам
    #39601267
unregestered
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
<c:forEach var="item" value="${requestScope.rss.chanel.item}">
<c:out value="${item.name}"/>
</c:forEach>
...
Рейтинг: 0 / 0
Unmarshaling RSS в JAXB и доступ к внутренним nod'ам
    #39601275
unregestered
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczAnton Romanov,

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

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


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

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


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