Class FreemarkerViewRenderer

java.lang.Object
org.apache.juneau.rest.server.view.freemarker.FreemarkerViewRenderer
All Implemented Interfaces:
ResponseProcessor, ViewRenderer

public class FreemarkerViewRenderer extends Object implements ViewRenderer
ResponseProcessor that detects FreemarkerView-typed return values and asks the configured Configuration to render them directly onto the response writer.

Auto-registered by FreemarkerMixin via @Rest(responseProcessors=...) — callers who add the mixin don't need to wire up this class explicitly. Callers who want to handle FreemarkerView returns without adopting the mixin can add this class to their own responseProcessors list.

Behavior:
  1. Inspect the response content. If the value is not a FreemarkerView, return NEXT so the rest of the chain runs.
  2. Read the active FreemarkerMixin from the RestContext bean store to discover the Configuration (lazy default if no configuration bean is registered) and the optional template-suffix knob.
  3. Apply every entry from FreemarkerView.getResponseHeaders() via res.setHeader(...).
  4. Default Content-Type to text/html;charset=UTF-8 if the caller did not set one explicitly. FreeMarker's bridge-default Configuration uses HTMLOutputFormat so HTML is the natural target; an explicit caller header wins.
  5. Call configuration.getTemplate(templateName).process(view.getAttributes(), res.getWriter()) to stream the rendered output.
  6. When no FreeMarker engine is on the classpath, the Configuration-typed import here fails to load at first use and surfaces NO_ENGINE_DIAGNOSTIC naming the missing dependency.
See Also:
Since:
10.0.0
  • Field Details

    • DEFAULT_CONTENT_TYPE

      public static final String DEFAULT_CONTENT_TYPE
      Default Content-Type applied when the view does not specify one explicitly.
      See Also:
    • NO_ENGINE_DIAGNOSTIC

      public static final String NO_ENGINE_DIAGNOSTIC
      Diagnostic message emitted when no FreeMarker engine can be found on the classpath at render-time.

      Public so tests and consumer apps can pattern-match against the message text without depending on internal string literals.

      See Also:
  • Constructor Details

  • Method Details

    • process

      public int process(RestOpSession opSession) throws IOException, BasicHttpException
      Description copied from interface: ResponseProcessor
      Process this response if possible.
      Specified by:
      process in interface ResponseProcessor
      Parameters:
      opSession - The HTTP call.
      Returns:
      One of the following codes:
      • 0 - The processor could not handle the request.
      • 1 - The processor was able to fully handle the request.
      • 2 - The processor was able to partially handle the request by replacing the output. The response processors should start over.
      Throws:
      IOException - If low-level exception occurred on output stream.
      Results in a HttpServletResponse.SC_INTERNAL_SERVER_ERROR error.
      BasicHttpException - If some other exception occurred.
      Can be used to provide an appropriate HTTP response code and message.