@XmlCDATA MOXy, похоже, не влияет

Я хотел бы, чтобы в браузер было возвращено следующее (исходный код)

<content>
<![CDATA[Please show this inside a unescaped CDATA tag]]>
</content>

Но я действительно понимаю

<content>
Please show this inside a unescaped CDATA tag
</content>

Если я изменяю значение содержания на

< ;![CDATA[Покажите это внутри неэкранированного тега CDATA]]> ; , тем меньше и больше чем для тега экранируются.

Интересно, как добиться того, что я хотел????

Вот мой код

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/myRequest")
public class MyRestClass {

    @GET
    @Path("{myPathNumber}")
    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public Object doInquiry(@PathParam("myPathNumber") String myPathNumber) {
        try {
            return new MyObject();
        } catch (Exception e) {
            return "exception " + e.getMessage();
        }
    }
}
package org.openengine.wink;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import org.eclipse.persistence.oxm.annotations.XmlCDATA;

@XmlRootElement
public class MyObject implements Serializable {

    @XmlElement 
    @XmlCDATA
    private String content = "Please show this inside a unescaped CDATA tag";

}

в пакете org.openengine.wink у меня есть файл jaxb.properties со следующим содержимым

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

person user1346730    schedule 01.11.2012    source источник


Ответы (1)


ПУТЬ К КЛАССУ

Насколько я понимаю, EclipseLink JAXB (MOXy) не правильно настроен в пути к классам, и JAXB RI используется в качестве поставщика JAXB (JSR-222) в вашей среде.


МЕТАДАТЫ

Предоставленные вами метаданные EclipseLink JAXB (MOXy) быть правильным. Это можно проверить с помощью следующего автономного демонстрационного кода.

Мой объект

По умолчанию реализации JAXB (JSR-222) выглядят для метаданных свойства (геттер/сеттер). Поскольку вы аннотировали поле, я бы рекомендовал использовать аннотацию @XmlAccessorType(XmlAccessType.FIELD (см.: http://blog.bdoughan.com/2011/06/using-jaxbs-xmlaccessortype-to.html).

package org.openengine.wink;

import java.io.Serializable;
import javax.xml.bind.annotation.*;
import org.eclipse.persistence.oxm.annotations.XmlCDATA;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class MyObject implements Serializable {

    @XmlElement 
    @XmlCDATA
    private String content = "Please show this inside a unescaped CDATA tag";

}

jaxb.properties

Чтобы указать MOXy в качестве поставщика JAXB, вам необходимо иметь двоичные файлы EclipseLink в пути к классам и иметь файл с именем jaxb.properties в том же пакете, что и ваша модель домена, со следующей записью (см.: http://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-as-your.html ).

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

Демо

package org.openengine.wink;

import javax.xml.bind.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(MyObject.class);

        MyObject myObject = new MyObject();

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(myObject, System.out);
    }

}

Вывод

<?xml version="1.0" encoding="UTF-8"?>
<myObject>
   <content><![CDATA[Please show this inside a unescaped CDATA tag]]></content>
</myObject>

Для получения дополнительной информации

person bdoughan    schedule 01.11.2012