WebSphere® Application Server バージョン 8 で JAXB アノテーション付きクラスの JSON へのシリアライズを処理するデフォルトの JSON プロセッサーは、Jackson です。
代わりに以前の Feature Packs for Web 2.0 の IBM® JSON4J プロセッサーを使用する場合には、プロバイダー・クラスを追加しなければなりません。
Jackson の方がより優れた JSON 処理を提供します。
このタスクについて
アプリケーションで IBM JSON4J プロセッサーを使用するには、JSON4JJAXBProvider クラスを拡張する Java™ クラスをアプリケーションに追加する必要があります。
手順
- アノテーション・スキャンを使用し、javax.ws.rs.core.Application サブクラスを介して JAX-RS クラスすべてを指定しない場合には、com.ibm.websphere.jaxrs.providers.json4j.JSON4JJAXBProvider クラスを拡張する Java クラスを追加する必要があります。 以下の例は、カスタム JSON4JJAXBProvider クラスを示しています。
package com.example.jaxrs;
@Provider
@Consumes(value = {MediaType.APPLICATION_JSON, "application/javascript"})
@Produces(value = {MediaType.APPLICATION_JSON, "application/javascript"})
public class CustomJSON4JJAXBProvider extends
com.ibm.websphere.jaxrs.providers.json4j.JSON4JJAXBProvider {
}
- 使用している JAX-RS クラスをリストするカスタマイズされた javax.ws.rs.core.Application クラスを使用する場合、Application サブクラスにカスタマイズされた JSON4JJAXBProvider を追加しなければなりません。 以下の例は、カスタマイズされた Application サブクラスを示しています。
package com.example.jaxrs;
public class CustomApplication extends javax.ws.rs.core.Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> classes = new HashSet<Class<?>>();
/* add your normal JAX-RS classes */
classes.add(CustomJSON4JJAXBProvider.class);
return classes;
}
}
タスクの結果
これで、JAXB から JSON へのシリアライズに、本製品に組み込まれているデフォルトの Jackson プロセッサーではなく、IBM JSON4J プロセッサーが使用されるようになりました。