我想将以下内容返回浏览器(查看源代码)
<content>
<![CDATA[Please show this inside a unescaped CDATA tag]]>
</content>
但我实际上得到了
<content>
Please show this inside a unescaped CDATA tag
</content>
如果,我将内容的值更改为
&amp; lt;![CDATA [请在未转义的CDATA标签内显示]]&amp; gt; ,标签的小于和大于转义。
想知道如何实现我想要的东西????
这是我的代码
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
答案 0 :(得分:4)
<强> CLASSPATH 强>
我最好的猜测是,在您的类路径中未正确配置EclipseLink JAXB (MOXy),并且JAXB RI正在您的环境中用作JAXB(JSR-222)提供程序。
<强> METADATA 强>
您提供的EclipseLink JAXB (MOXy)元数据似乎是正确的。这可以通过以下独立演示代码进行验证。
<强>为MyObject 强>
默认情况下JAXB (JSR-222)实现会在属性上查找元数据(getter / setter)。由于您已对该字段进行了注释,因此我建议您使用@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>
了解更多信息