Class Jackson2JsonpInterceptor

java.lang.Object
org.jboss.resteasy.plugins.providers.jackson.Jackson2JsonpInterceptor
All Implemented Interfaces:
jakarta.ws.rs.ext.WriterInterceptor, AsyncWriterInterceptor

@Provider @ConstrainedTo(SERVER) public class Jackson2JsonpInterceptor extends Object implements AsyncWriterInterceptor

JSONP is an alternative to normal AJAX requests. Instead of using a XMLHttpRequest a script tag is added to the DOM. The browser will call the corresponding URL and download the JavaScript. The server creates a response which looks like a method call. The parameter is the body of the request. The name of the method to call is normally passed as query parameter. The method has to be present in the current JavaScript environment.

Jackson JSON processor can produce such an response. This interceptor checks if the media type is a JavaScript one if there is a query parameter with the method name. The default name of this query parameter is "callback". So this interceptor is compatible with jQuery.

It is possible to wrap the generated javascript function call in a try-catch block. You can enable it either by setting the wrapInTryCatch property of the provider instance to true or by setting the resteasy.jsonp.silent context-param to true:

  
  <context-param>
   <param-name>resteasy.jsonp.silent</param-name>
   <param-value>true</param-value>
  </context-param>
  
 
Version:
$Revision: 1 $
Author:
Holger Morch
  • Field Details

    • TEXT_JAVASCRIPT_MEDIA_TYPE

      public static final jakarta.ws.rs.core.MediaType TEXT_JAVASCRIPT_MEDIA_TYPE
      "text/javascript" media type. Default media type of script tags.
    • APPLICATION_JAVASCRIPT_MEDIA_TYPE

      public static final jakarta.ws.rs.core.MediaType APPLICATION_JAVASCRIPT_MEDIA_TYPE
      "application/javascript" media type.
    • TEXT_JSON_TYPE

      public static final jakarta.ws.rs.core.MediaType TEXT_JSON_TYPE
      "text/json" media type.
    • APPLICATION_PLUS_JSON_TYPE

      public static final jakarta.ws.rs.core.MediaType APPLICATION_PLUS_JSON_TYPE
      "application/*+json" media type.
    • DEFAULT_CALLBACK_QUERY_PARAMETER

      public static final String DEFAULT_CALLBACK_QUERY_PARAMETER
      Default name of the query parameter with the method name.
      See Also:
    • jsonpCompatibleMediaTypes

      public static final MediaTypeMap<String> jsonpCompatibleMediaTypes
      If response media type is one of this jsonp response may be created.
    • DEFAULT_MAPPER

      protected static final com.fasterxml.jackson.databind.ObjectMapper DEFAULT_MAPPER
      Default ObjectMapper for type resolution. Used if none is provided by Providers.
    • objectMapper

      protected com.fasterxml.jackson.databind.ObjectMapper objectMapper
      The ObjectMapper used to create typing information.
    • providers

      protected jakarta.ws.rs.ext.Providers providers
      The Providers used to retrieve the objectMapper from.
  • Constructor Details

    • Jackson2JsonpInterceptor

      public Jackson2JsonpInterceptor()
  • Method Details

    • aroundWriteTo

      public void aroundWriteTo(jakarta.ws.rs.ext.WriterInterceptorContext context) throws IOException, jakarta.ws.rs.WebApplicationException
      Specified by:
      aroundWriteTo in interface jakarta.ws.rs.ext.WriterInterceptor
      Throws:
      IOException
      jakarta.ws.rs.WebApplicationException
    • asyncAroundWriteTo

      public CompletionStage<Void> asyncAroundWriteTo(AsyncWriterInterceptorContext context)
      Description copied from interface: AsyncWriterInterceptor
      Interceptor method wrapping calls to AsyncMessageBodyWriter.asyncWriteTo(T, java.lang.Class<?>, java.lang.reflect.Type, java.lang.annotation.Annotation[], jakarta.ws.rs.core.MediaType, jakarta.ws.rs.core.MultivaluedMap<java.lang.String, java.lang.Object>, org.jboss.resteasy.spi.AsyncOutputStream) method. The parameters of the wrapped method called are available from context. Implementations of this method SHOULD explicitly call AsyncWriterInterceptorContext.asyncProceed() to invoke the next interceptor in the chain, and ultimately the wrapped AsyncMessageBodyWriter.asyncWriteTo method.
      Specified by:
      asyncAroundWriteTo in interface AsyncWriterInterceptor
      Parameters:
      context - invocation context.
      Returns:
      a CompletionStage indicating completion
    • getObjectMapper

      protected com.fasterxml.jackson.databind.ObjectMapper getObjectMapper(Class<?> type, jakarta.ws.rs.core.MediaType mediaType)
      Search for an ObjectMapper for the given class and mediaType
      Parameters:
      type - the Class to serialize
      mediaType - the response MediaType
      Returns:
      the ObjectMapper
    • setUri

      @Context public void setUri(jakarta.ws.rs.core.UriInfo uri)
      Setter used by RESTeasy to provide the UriInfo.
      Parameters:
      uri - the uri to set
    • setProviders

      @Context public void setProviders(jakarta.ws.rs.ext.Providers providers)
      Setter used by RESTeasy to provide the Providers
      Parameters:
      providers -
    • setObjectMapper

      public void setObjectMapper(com.fasterxml.jackson.databind.ObjectMapper objectMapper)
      Set an fix ObjectMapper. If this is not set Providers are used for lookup. If there are is none too, use a default one.
      Parameters:
      objectMapper -
    • getCallbackQueryParameter

      public String getCallbackQueryParameter()
      Get the name of the query parameter which contains the JavaScript method name. Default: callback.
      Returns:
      the callbackQueryParameter
    • setCallbackQueryParameter

      public void setCallbackQueryParameter(String callbackQueryParameter)
      Set callback query parameter.
      Parameters:
      callbackQueryParameter - the callbackQueryParameter to set
      See Also:
    • isWrapInTryCatch

      public boolean isWrapInTryCatch()
      Check is the JSONP callback will be wrapped with try-catch block
      Returns:
      true if try-catch block is generated; false otherwise
    • setWrapInTryCatch

      public void setWrapInTryCatch(boolean wrapInTryCatch)
      Enables or disables wrapping the JSONP callback try try-catch block
      Parameters:
      wrapInTryCatch - true if you want to wrap the result with try-catch block; false otherwise