ジャージで記述されたRESTWebサービスに取り組んでおり、CDATAセクションを含むXMLを出力しようとしています。JAXBのリファレンス実装がそれをサポートしていないことを理解しているので、EclipseLinkのMOXyをダウンロードし、@XmlCDATAアノテーションを機能させようとしています。
私のJAXBマップされたBeanは次のようになります
package com.me.entities;
@XmlRootElement @XmlAccessorType(XmlAccessType.FIELD)
public class MyBean {
@XmlAttribute
private URI thumbnail;
@XmlElement(name="longdescription") @XmlCDATA
private String description;
public MyBean() { }
public final String getDescription() { return description; }
public final void setDescription(String d) { this.description = d; }
}
そして、クラスファイルと一緒にjaxb.properties
ファイルがあります。com/me/entities
プロパティファイルには
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
初期化。ファクトリクラス名をナンセンスに置き換えるとアプリが機能しなくなるため、正常に読み込まれると確信しています。また、自分でJAXBContextを作成するファイルを明示的にマーシャリングすることは問題なく機能するため、問題はジャージに関連しているようです。これによると、私のセットアップは問題ありませんが、ジャージリソースがMyBeanのインスタンスを返す場合
...
@GET @Produces(MediaType.TEXT_XML)
public MyBean getMyBean() {
MyBean b = new MyBean();
b.setDescription("Some blurb plenty of invalid chars like <<< && >>>");
return b;
}
返されるものにはCDATAが含まれていませんが、次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<info><longdescription>Some blurb plenty of invalid chars like <<< && >>></longdescription></info>
私は何が間違っているのですか?