Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 CDATA в jaxb ?  [new]
grok
Member

Откуда:
Сообщений: 1702
мне нужно поле с содержимым CDATA
как в xml так и обратно

поискал что пишут....

одни предлагают адаптер, что наверное будет работать, но мне не нравится.

@XmlCDATA я попробовал, но почему-то не работает.
не понял как им пользоваться....

есть еще варианты ?
нужно что-то простое и в обе стороны
14 май 21, 16:37    [22322320]     Ответить | Цитировать Сообщить модератору
 Re: CDATA в jaxb ?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 8254
grok,
Простое?
Байты в base64 и в обычное строковое поле xml
14 май 21, 17:22    [22322339]     Ответить | Цитировать Сообщить модератору
 Re: CDATA в jaxb ?  [new]
mayton
Member

Откуда: loopback
Сообщений: 51389
grok

@XmlCDATA я попробовал, но почему-то не работает.
не понял как им пользоваться....

Покажи как ты пользовался.
14 май 21, 21:19    [22322421]     Ответить | Цитировать Сообщить модератору
 Re: CDATA в jaxb ?  [new]
grok
Member

Откуда:
Сообщений: 1702
mayton
grok

@XmlCDATA я попробовал, но почему-то не работает.
не понял как им пользоваться....

Покажи как ты пользовался.


public class Main {

    @XmlRootElement
    @XmlAccessorType(XmlAccessType.PROPERTY)
    public static class Test {

        public String zzz;

        @XmlCDATA
        public String getZzz() {
            return zzz;
        }

        @XmlCDATA
        public void setZzz(String zzz) {
            this.zzz = zzz;
        }
    }

    public static void main(String[] args) throws Exception {

        Test t = new Test();
        t.setZzz("qqq>>>");

        JAXBContext jaxbContext = JAXBContext.newInstance(Test.class);
        Marshaller marshaller = jaxbContext.createMarshaller();
        ByteArrayOutputStream bs = new ByteArrayOutputStream();
        marshaller.marshal(t, bs);

        System.out.println(bs.toString("UTF-8"));
    }
}
15 май 21, 12:29    [22322511]     Ответить | Цитировать Сообщить модератору
 Re: CDATA в jaxb ?  [new]
grok
Member

Откуда:
Сообщений: 1702
PetroNotC Sharp
grok,
Простое?
Байты в base64 и в обычное строковое поле xml


не пойдет, потому что xml будут читать глазами и править руками
потому и нужно CDATA, даже ескейпинг не пойдет
15 май 21, 12:31    [22322512]     Ответить | Цитировать Сообщить модератору
 Re: CDATA в jaxb ?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 8254
grok,
Ты что то не договорил.
Просто "потому что руками" не причина.
А вот если кто то в здравом уме пишет теги руками. То они могут помешать парсеру.
Например так
<![CDATA[<sender>John Smith</sender>]]>
Неужели теги пишете?
15 май 21, 16:08    [22322547]     Ответить | Цитировать Сообщить модератору
 Re: CDATA в jaxb ?  [new]
SpringMan
Member

Откуда:
Сообщений: 231
Не похоже, что есть что-то стандартное в jaxb для принудительного отображения в cdata
@XmlCDATA из какого пакета? - похоже, что из эклипсового? Если она оттуда, то надо использовать эклипсовую имплементацию jaxb. Если поменять имплементацию нельзя, то надо гуглить костыли, для той, которая используется

Сообщение было отредактировано: 15 май 21, 17:46
15 май 21, 17:46    [22322568]     Ответить | Цитировать Сообщить модератору
 Re: CDATA в jaxb ?  [new]
mayton
Member

Откуда: loopback
Сообщений: 51389
Ну подкинул задачку. Этот JAXb уже в 11-тке и не летает.
15 май 21, 23:21    [22322605]     Ответить | Цитировать Сообщить модератору
 Re: CDATA в jaxb ?  [new]
mayton
Member

Откуда: loopback
Сообщений: 51389
Jackson вроде из коробки поддерживает эти си-даты.

+
@JacksonXmlRootElement(localName = "book-info")
public class BookInfo {

    @JacksonXmlElementWrapper
    private String title;

    @JacksonXmlElementWrapper
    private String author;

    @JacksonXmlCData
    private String content;


@Test
    void test() throws JAXBException, IOException {

        JacksonXmlModule module = new JacksonXmlModule();
        // and then configure, for example:
        module.setDefaultUseWrapper(false);
        XmlMapper xmlMapper = new XmlMapper(module);
        xmlMapper.enable(SerializationFeature.INDENT_OUTPUT);


        /*JAXBContext jaxbContext = JAXBContext.newInstance(BookInfo.class);
        Marshaller marshaller = jaxbContext.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);*/

        BookInfo bookInfo = new BookInfo();
        bookInfo.setTitle("Лелия");
        bookInfo.setAuthor("Жорж Санд.");
        bookInfo.setContent("Когда, поддавшись легковерной надежде");

        StringWriter sw = new StringWriter();

        xmlMapper.writeValue(sw, bookInfo);

        /*marshaller.marshal(bookInfo, sw);
        sw.flush();*/

        assertEquals("",
                sw.toString());
    }


<book-info>
  <title>Лелия</title>
  <author>Жорж Санд.</author>
  <content><![CDATA[Когда, поддавшись легковерной надежде]]></content>
</book-info>
16 май 21, 00:00    [22322613]     Ответить | Цитировать Сообщить модератору
 Re: CDATA в jaxb ?  [new]
SpringMan
Member

Откуда:
Сообщений: 231
mayton
Ну подкинул задачку. Этот JAXb уже в 11-тке и не летает.

Не понял, из 11ой же как раз все и выпилили
16 май 21, 00:07    [22322617]     Ответить | Цитировать Сообщить модератору
 Re: CDATA в jaxb ?  [new]
grok
Member

Откуда:
Сообщений: 1702
SpringMan
Не похоже, что есть что-то стандартное в jaxb для принудительного отображения в cdata
@XmlCDATA из какого пакета? - похоже, что из эклипсового? Если она оттуда, то надо использовать эклипсовую имплементацию jaxb. Если поменять имплементацию нельзя, то надо гуглить костыли, для той, которая используется


нет, не эклипс

я всунул че мне идея предложила

com.sun.xml.internal.txw2.annotation.XmlCDATA
16 май 21, 03:27    [22322631]     Ответить | Цитировать Сообщить модератору
 Re: CDATA в jaxb ?  [new]
grok
Member

Откуда:
Сообщений: 1702
PetroNotC Sharp
grok,
Ты что то не договорил.
Просто "потому что руками" не причина.
А вот если кто то в здравом уме пишет теги руками. То они могут помешать парсеру.
Например так
<![CDATA[<sender>John Smith</sender>]]>
Неужели теги пишете?


мне казалось, в CDATA можно писать всё что угодно, на то оно и CDATA
реально, у меня там будет sql-запрос (не спрашивайте зачем)
в котором теоритически бывают строковые литералы с тегами
(у меня на самом деле нет)
16 май 21, 03:31    [22322632]     Ответить | Цитировать Сообщить модератору
 Re: CDATA в jaxb ?  [new]
grok
Member

Откуда:
Сообщений: 1702
SpringMan
Не похоже, что есть что-то стандартное в jaxb для принудительного отображения в cdata
@XmlCDATA из какого пакета? - похоже, что из эклипсового? Если она оттуда, то надо использовать эклипсовую имплементацию jaxb. Если поменять имплементацию нельзя, то надо гуглить костыли, для той, которая используется


Можно ли как-то прикрутить эклипсовую имплементацию в IDEA ?
Я бы выбрал этот вариант если возможно
16 май 21, 04:28    [22322635]     Ответить | Цитировать Сообщить модератору
 Re: CDATA в jaxb ?  [new]
grok
Member

Откуда:
Сообщений: 1702
grok
SpringMan
Не похоже, что есть что-то стандартное в jaxb для принудительного отображения в cdata
@XmlCDATA из какого пакета? - похоже, что из эклипсового? Если она оттуда, то надо использовать эклипсовую имплементацию jaxb. Если поменять имплементацию нельзя, то надо гуглить костыли, для той, которая используется


Можно ли как-то прикрутить эклипсовую имплементацию в IDEA ?
Я бы выбрал этот вариант если возможно


попробовал, не выходит

Exception in thread "main" java.lang.UnsupportedClassVersionError: org/eclipse/persistence/jaxb/JAXBContextFactory : Unsupported major.minor version 52.0

запускаю на 1.7
16 май 21, 05:15    [22322636]     Ответить | Цитировать Сообщить модератору
 Re: CDATA в jaxb ?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 8254
grok,
Дело ваше. Писать просто руками в xml уже давно плохой тон.
Понимаю что вам дали ТЗ такое.
Удачи!
16 май 21, 09:43    [22322654]     Ответить | Цитировать Сообщить модератору
 Re: CDATA в jaxb ?  [new]
SpringMan
Member

Откуда:
Сообщений: 231
grok,

Или версию java поднимите или подаунгрейдите версию зависимости - никто же не знает, какую конкретно версию используете
16 май 21, 12:21    [22322684]     Ответить | Цитировать Сообщить модератору
 Re: CDATA в jaxb ?  [new]
mad_nazgul
Member

Откуда:
Сообщений: 5687
grok
grok
пропущено...


Можно ли как-то прикрутить эклипсовую имплементацию в IDEA ?
Я бы выбрал этот вариант если возможно


попробовал, не выходит

Exception in thread "main" java.lang.UnsupportedClassVersionError: org/eclipse/persistence/jaxb/JAXBContextFactory : Unsupported major.minor version 52.0

запускаю на 1.7


Компилируете в одной версии Java а запускаете в другой.
Компилируйте в той же версии, что и запускаете.
16 май 21, 20:24    [22322837]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить