MOXy では、jsonProvider が JAXB に対してどのように仕事をしなければならないかを指定できます。
したがって、JAX-RS を実行する場合は、Application から派生したクラスに次のコードを追加します。
このコードを Tomcat 7 で使用すると、良い結果が得られました。(eclipselink 2.4.1)
@ApplicationPath("/rest")
public class RestApplication extends Application
{
...
public Set< Object> getSingletons()
{
HashSet<Object> set = new HashSet<Object>(1);
set.add( newMoxyJsonProvider());
return set;
}
public static MOXyJsonProvider newMoxyJsonProvider()
{
MOXyJsonProvider result = new MOXyJsonProvider();
//result.setAttributePrefix("@");
result.setFormattedOutput( false);
result.setIncludeRoot( false);
result.setMarshalEmptyCollections( true);
//result.setValueWrapper("$");
return result;
}
ただし、Glassfish 3.1.2 および WAS 8.5 では、newMoxyJsonProvider() は必要ありませんが、JAXB プロバイダーはサーバーによって構成されます。MOXy に付属している Glassfish の場合、null 値で同じ問題が発生しました。まだ確認していませんが、答えは、可能であればアプリケーション サーバー レベルで JAXB を構成することにあると思います。