Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос по JAXB / 7 сообщений из 7, страница 1 из 1
21.10.2016, 10:22
    #39331259
grok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по JAXB
есть один по сути класс
в XML он может быть в двух местах
и там отличается только root element
остальное всё одинаково

можно ли как-то сделать чтоб это был именно один класс?
не хочется городить 2 класса которые отличаются только одной аннотацией XmlRootElement

ЗЫ пишу всё на аннотациях, xsd нет и не будет
...
Рейтинг: 0 / 0
21.10.2016, 10:29
    #39331268
grok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по JAXB
забыл добавить

root element определяется парентом, возможно не одним
если парента нету должен быть какой-то default
...
Рейтинг: 0 / 0
21.10.2016, 12:44
    #39331459
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по JAXB
grokесть один по сути класс
в XML он может быть в двух местах
и там отличается только root element
остальное всё одинаково

можно ли как-то сделать чтоб это был именно один класс?
не хочется городить 2 класса которые отличаются только одной аннотацией XmlRootElement

ЗЫ пишу всё на аннотациях, xsd нет и не будет

Ну на крайний случай есть .replaceAll(x,y)
<:o)
...
Рейтинг: 0 / 0
23.10.2016, 13:35
    #39332292
bochkov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по JAXB
grokесть один по сути класс
в XML он может быть в двух местах
и там отличается только root element
остальное всё одинаково

можно ли как-то сделать чтоб это был именно один класс?
не хочется городить 2 класса которые отличаются только одной аннотацией XmlRootElement

ЗЫ пишу всё на аннотациях, xsd нет и не будет
можно,
но это будет костыль
дешевле сделать 1 класс
и 2 которые его на следовать будут
в них и определить рут элемент
...
Рейтинг: 0 / 0
23.10.2016, 14:22
    #39332303
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по JAXB
grok,

Воспользуйтесь JAXBElement<>
...
Рейтинг: 0 / 0
23.10.2016, 17:31
    #39332340
grok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по JAXB
Usmangrok,

Воспользуйтесь JAXBElement<>

а можно подробнее для нубов ?
...
Рейтинг: 0 / 0
23.10.2016, 20:06
    #39332377
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по JAXB
grokUsmangrok,

Воспользуйтесь JAXBElement<>

а можно подробнее для нубов ?
Код: 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.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
package org.example;

import java.io.StringReader;
import java.io.StringWriter;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamReader;

public class JAXBExample {

    @XmlRootElement
    @XmlType(propOrder = { "field" })
    @XmlAccessorType(XmlAccessType.FIELD)
    static class Xml1 {

        @XmlElement
        private String field;

        public String getField() {
            return field;
        }

        public void setField(String field) {
            this.field = field;
        }
    }

    @XmlRootElement
    @XmlType(propOrder = { "field" })
    @XmlAccessorType(XmlAccessType.FIELD)
    static class Xml2 {

        @XmlElement
        private String field;

        public String getField() {
            return field;
        }

        public void setField(String field) {
            this.field = field;
        }
    }

    public static void main(String[] args) throws Exception {
        Xml1 xml1 = new Xml1();
        xml1.setField("XML_1");

        Xml2 xml2 = new Xml2();
        xml2.setField("XML_2");

        JAXBContext context = JAXBContext.newInstance(Xml1.class, Xml2.class);

        try (StringWriter sw1 = new StringWriter(); StringWriter sw2 = new StringWriter()) {
            JAXBElement<Xml1> jaxbElement1 = new JAXBElement<>(new QName("abrakadabra"), Xml1.class, xml1);

            JAXBElement<Xml2> jaxbElement2 = new JAXBElement<>(new QName("avarakedavra"), Xml2.class, xml2);

            String xmlString1;
            String xmlString2;

            Marshaller m = context.createMarshaller();
            Unmarshaller u = context.createUnmarshaller();

            m.marshal(jaxbElement1, sw1);
            xmlString1 = sw1.toString();

            m.marshal(jaxbElement2, sw2);
            xmlString2 = sw2.toString();

            System.out.println(xmlString1);
            System.out.println(xmlString2);

            XMLInputFactory xif = XMLInputFactory.newFactory();
            XMLStreamReader xsr1 = xif.createXMLStreamReader(new StringReader(xmlString1));
            XMLStreamReader xsr2 = xif.createXMLStreamReader(new StringReader(xmlString2));

            xml2 = u.unmarshal(xsr1, Xml2.class).getValue();
            xml1 = u.unmarshal(xsr2, Xml1.class).getValue();

            System.out.println(xml1.getField());
            System.out.println(xml2.getField());
        } catch (Exception e) {
            e.printStackTrace(System.out);
        }
    }
}


Вывод:
Код: xml
1.
2.
3.
4.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><abrakadabra><field>XML_1</field></abrakadabra>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><avarakedavra><field>XML_2</field></avarakedavra>
XML_2
XML_1
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос по JAXB / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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