Использование аннотации MOXy @XmlCDATA с трикотажем - PullRequest
1 голос
/ 25 июля 2011

Я работаю над веб-сервисом REST, написанным с использованием джерси, и пытаюсь вывести некоторый XML с разделами CDATA.Я понимаю, эталонная реализация JAXB не поддерживает это , поэтому я скачал MOXy EclipseLink и пытаюсь заставить работать аннотацию @XmlCDATA.выглядит так:

package com.me.entities;

@XmlRootElement @XmlAccessorType(XmlAccessType.FIELD)
public class MyBean {

    @XmlAttribute
    private URI thumbnail;

    @XmlElement(name="longdescription") @XmlCDATA
    private String description;

    public MyBean() { }

    public final String getDescription() { return description; }

    public final void setDescription(String d) { this.description = d; }
}

, и у меня есть файл jaxb.properties в com/me/entities вместе с файлами классов.Файл свойств содержит

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

.Я уверен, что он загружается успешно, так как, если я заменю имя класса фабрики какой-то ерундой, приложение сломается.Кроме того, явно маршалинг файла, создающего JAXBContext самостоятельно, работает нормально, поэтому проблема, похоже, связана с трикотажем.Согласно this мои настройки в порядке, но когда мой ресурс jersey возвращает экземпляр MyBean

...
@GET @Produces(MediaType.TEXT_XML) 
public MyBean getMyBean() {
    MyBean b = new MyBean();
    b.setDescription("Some blurb plenty of invalid chars like <<< && >>>");

    return b;
 }

, то, что я получаю, не имеет CDATA, но выглядит как

<?xml version="1.0" encoding="UTF-8"?>
<info><longdescription>Some blurb plenty of invalid chars like &lt;&lt;&lt; &amp;&amp; >>></longdescription></info>

Что я делаю не так?

Ответы [ 2 ]

2 голосов
/ 26 июля 2011

Похоже, проблема была в том, что мой сервер приложений работал с WebLogic 10.3.5 в режиме разработки, который поставляется с множеством предустановленных общих библиотек, которые в конфигурации по умолчанию имеют приоритет надте, которые развернуты в папке webapp WEB-INF/lib.

Чтобы исправить это, необходимо описание конкретного веб-приложения, просто создайте файл weblogic.xml внутри WEB-INF, содержащий параметр prefer-web-inf-classes.Файл, который я использовал, выглядит так:

<?xml version='1.0' standalone='yes'?>
<weblogic-web-app>
  <container-descriptor>
    <prefer-web-inf-classes>true</prefer-web-inf-classes>
  </container-descriptor>
</weblogic-web-app>

Я до сих пор не знаю, с какой библиотекой возникла проблема, хотя любой знает, не стесняйтесь редактировать этот ответ.

0 голосов
/ 28 мая 2013

Пожалуйста, загрузите расширение Jaxb: это расширение с открытым исходным кодом Eclipselink для Jaxb.Получить файл jar: eclipselink.jar скопировать в Project lib.

http://www.eclipse.org/eclipselink/downloads/
EclipseLink 2.4.1 Installer Zip (37 MB)

И посмотрите пример по адресу:

http://theopentutorials.com/tutorials/java/jaxb/jaxb-marshalling-and-unmarshalling-cdata-block-using-eclipselink-moxy/

Хороший взгляд!

...