CDATA ブロックを使用してオブジェクトをマーシャリングしたいと考えています。これは、マーシャラーを作成し、CharacterEscapeHandler (http://stackoverflow.com/questions/14193944/jaxb-marshalling-unmarshalling-with-cdata) のプロパティを設定することで実行できます。しかし、ジャージーでは、マーシャリングはジャージーによって行われます。では、CDATA を使用してオブジェクトをマーシャリングするようジャージに指示するにはどうすればよいでしょうか。
私は次のサービスを持っています
@GET
@Path("/getdata")
@Produces(MediaType.TEXT_XML)
public HelloBean getData() throws Exception
{
HelloBean h1 = new HelloBean();
h1.setName("kshitij");
return h1;
}
そしてBeanクラスは
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "root")
@XmlAccessorType(XmlAccessType.FIELD)
public class HelloBean {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Adapter クラスを追加してみました。しかし問題は、ジャージが使用しているデフォルトのマーシャラーに追加のプロパティを設定する方法です。
次のプロパティを設定したい。
marshaller.setProperty(CharacterEscapeHandler.class.getName(), new CharacterEscapeHandler() {
public void escape(char[] ac, int i, int j, boolean flag,
Writer writer) throws IOException {
writer.write( ac, i, j ); }
});