Class Var

java.lang.Object
org.apache.juneau.svl.Var
Direct Known Subclasses:
SimpleVar, StreamedVar

public abstract class Var extends Object
Abstract superclass of all Simple Var Language variables.

Vars are used to convert simple variables of the form "$varName{varKey}" into something else by the VarResolver class.

Subclasses must implement one of the following two methods:

Subclasses MUST implement a no-arg constructor so that class names can be passed to the VarResolver.Builder.vars(Class...) method.
They must also be thread safe!

Two direct abstract subclasses are provided to differentiated between simple and streamed vars:

See Also:
  • Constructor Details

  • Method Details

    • getName

      protected String getName()
      Return the name of this variable.

      For example, the system property variable returns "S" since the format of the variable is "$S{system.property}".

      Returns:
      The name of this variable.
    • allowNested

      protected boolean allowNested()
      Returns whether nested variables are supported by this variable.

      For example, in "$X{$Y{xxx}}", $Y is a nested variable that will be resolved if this method returns true.

      The default implementation of this method always returns true. Subclasses can override this method to override the default behavior.

      Returns:
      true if nested variables are supported by this variable.
    • allowRecurse

      protected boolean allowRecurse()
      Returns whether variables in the resolved contents of this variable should also be resolved.

      For example, if "$X{xxx}" resolves to "$Y{xxx}", then the $Y variable will be recursively resolved if this method returns true.

      The default implementation of this method always returns true.
      Subclasses can override this method to override the default behavior.

      As a general rule, variables that resolve user-entered data should not be recursively resolved as this may cause a security hole.
      Returns:
      true if resolved variables should be recursively resolved.
    • canResolve

      protected boolean canResolve(VarResolverSession session)
      Returns true if this variable can be resolved in the specified session.

      For example, some variable cannot resolve unless specific context or session objects are available.

      Parameters:
      session - The current session.
      Returns:
      true if this variable can be resolved in the specified session.
    • doResolve

      protected String doResolve(VarResolverSession session, String arg) throws Exception
      The method called from VarResolver.

      Can be overridden to intercept the request and do special handling.
      Default implementation simply calls resolve(String).

      Parameters:
      session - The session object used for a single instance of a string resolution.
      arg - The inside argument of the variable.
      Returns:
      The resolved value.
      Throws:
      Exception - Any exception can be thrown.
    • resolve

      public abstract String resolve(VarResolverSession session, String arg) throws Exception
      The interface that needs to be implemented for subclasses of SimpleVar.
      Parameters:
      session - The session object used for a single instance of a var resolution.
      arg - The inside argument of the variable.
      Returns:
      The resolved value.
      Throws:
      Exception - Any exception can be thrown.
    • resolveTo

      public abstract void resolveTo(VarResolverSession session, Writer w, String arg) throws Exception
      The interface that needs to be implemented for subclasses of StreamedVar.
      Parameters:
      session - The session object used for a single instance of a var resolution.
      w - The writer to send the resolved value to.
      arg - The inside argument of the variable.
      Throws:
      Exception - Any exception can be thrown.