12.14. RESTEasy JAXB

12.14.1. JAXB デコレーターの作成

概要

RESTEasy の JAXB プロバイダーはマーシャラーおよびアンマーシャラーインスタンスを修飾するプラグ可能な方法を提供します。作成されたアノテーションによってマーシャラーまたはアンマーシャラーインスタンスが発生します。本トピックでは RESTEasy を用いて JAXB デコレーターを作成する手順を取り上げます。

手順12.8 RESTEasy による JAXB デコレーターの作成

  1. プロセッサークラスの作成

    1. DecoratorProcessor<Target, Annotation> を実装するクラスを作成します。ターゲットは JAXB マーシャラーまたはアンマーシャラーのクラスになります。アノテーションは手順 2 で作成されます。
    2. @DecorateTypes アノテーションをクラスに付け、デコレーターが修飾する必要がある MIME タイプ を宣言します。
    3. decorate 関数内でプロパティーまたは値を設定します。

    例12.22 プロセッサークラスの例

    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);
        }
    }
    
    
  2. アノテーションの作成

    1. @Decorator アノテーションが付けられたカスタムインターフェースを作成します。
    2. @Decorator アノテーションのプロセッサーとターゲットを宣言します。プロセッサーは手順 1 で作成されています。ターゲットは JAXB マーシャラーまたはアンマーシャラーのクラスになります。

    例12.23 アノテーションの例

    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 {}
    
    
  3. 手順 2 で作成されたアノテーションを関数に追加し、マーシャルされた時に入力か出力が修飾されるようにします。
結果

JAXB デコレーターが作成され、JAX-RS Web サービス内で適用されます。


このページには機械翻訳が使用されている場合があります (詳細はこちら)。