gpt4 book ai didi

rest - MOXy 的 @XmlCDATA 似乎没有影响

转载 作者:行者123 更新时间:2023-12-01 01:13:55 27 4
gpt4 key购买 nike

我想将以下内容返回到浏览器(查看源代码)

<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

最佳答案

类路径

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

元数据

EclipseLink JAXB (MOXy)您提供的元数据似乎是正确的。这可以通过以下独立演示代码进行验证。

我的对象

默认 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>

更多信息
  • http://blog.bdoughan.com/2010/07/cdata-cdata-run-run-data-run.html
  • 关于rest - MOXy 的 @XmlCDATA 似乎没有影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13183510/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com