2012-11-01 35 views
4

我想有以下返回给浏览器(查看源代码)莫西的@XmlCDATA似乎也没有影响

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

但我实际上可以得到

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

如果我改变的价值内容为

& lt;![CDATA [请在未转义的CDATA标签中显示此内容]] & 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 

回答

4

CLASSPATH

我最好的猜测是那EclipseLink JAXB (MOXy)未在您的类路径中正确配置,并且JAXB RI正被用作您的环境中的JAXB(JSR-222)提供程序。


元数据

您提供的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

要指定莫西为您的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> 

更多信息

相关问题