15.13. RESTEasy JAXB
15.13.1. JAXB デコレータを作成する
概要
RESTEasy の資料プロバイダーには、Marshaller および Un Marketplaceler インスタンスを切り離すプラグ可能な方法があります。Marshaller または Unmarshaller インスタンスのいずれかをトリガーできるアノテーションが作成されます。このトピックでは、RESTEasy を使用して JAXB デコレータを作成する手順について説明します。
手順15.8 RESTEasy を使用したデコレーターの作成
Processor クラスを作成します。
- DecoratorProcessor<Target, Annotation> を実装するクラスを作成します。ターゲットは JAXB Marshaller または Unmarshallerクラスのいずれかになります。アノテーションは、ステップ 2 で作成されます。
- クラスに @DecorateTypes アノテーションを付け、デコレーターがデコレートする必要のある MIME タイプを宣言します。
- 内でプロパティーまたは値を設定します
decorate
関数。
例15.25 例: Processor クラス
import org.jboss.resteasy.core.interception.DecoratorProcessor; import org.jboss.resteasy.annotations.DecorateTypes; import javax.xml.bind.Marshaller; import javax.xml.bind.PropertyException; import javax.ws.rs.core.MediaType; import javax.ws.rs.Produces; import java.lang.annotation.Annotation; @DecorateTypes({"text/*+xml", "application/*+xml"}) public class PrettyProcessor implements DecoratorProcessor<Marshaller, Pretty> { public Marshaller decorate(Marshaller target, Pretty annotation, Class type, Annotation[] annotations, MediaType mediaType) { target.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); } }
アノテーションを作成します。
- @Decorator アノテーションが付けられたカスタムインターフェースを作成します。
- @Decorator アノテーションのプロセッサーおよびターゲットを宣言します。プロセッサーは、ステップ 1 で作成されます。ターゲットは JAXB Marshaller または Unmarshallerクラスのいずれかになります。
例15.26 アノテーションの例
import org.jboss.resteasy.annotations.Decorator; @Target({ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) @Decorator(processor = PrettyProcessor.class, target = Marshaller.class) public @interface Pretty {}
- 手順 2 で作成したアノテーションを関数に追加して、入力または出力のいずれかがマーシャリングされるときにデコレートされるようにします。
結果
JAXB デコレータは、JAX-RSWeb サービス内で作成および適用されています。