Class JSONFormattedRequestControl

  • All Implemented Interfaces:
    java.io.Serializable

    @NotMutable
    @ThreadSafety(level=COMPLETELY_THREADSAFE)
    public final class JSONFormattedRequestControl
    extends Control
    This class provides an implementation of a request control that may be used to encapsulate a set of zero or more other controls represented as JSON objects, and to indicate that the server should return any response controls in a JSONFormattedResponseControl.
    NOTE: This class, and other classes within the com.unboundid.ldap.sdk.unboundidds package structure, are only supported for use against Ping Identity, UnboundID, and Nokia/Alcatel-Lucent 8661 server products. These classes provide support for proprietary functionality or for external specifications that are not considered stable or mature enough to be guaranteed to work in an interoperable way with other types of LDAP servers.

    This control has an OID of 1.3.6.1.4.1.30221.2.5.64, and it may optionally take a value. If the control is provided without a value, then it merely indicates that the server should return response controls in a JSONFormattedResponseControl. If the control has a value, then that value should be a JSON object that contains a single field, controls, whose value is an array of the JSON representations of the request controls that should be sent to the server. The JSON representations of the controls is the one generated by the Control.toJSONControl() method, and is the one expected by the Control.decodeJSONControl(com.unboundid.util.json.JSONObject, boolean, boolean) method. In particular, each control should have at least an oid field that specifies the OID for the control, and a criticality field that indicates whether the control is considered critical. If the control has a value, then either the value-base64 field should be used to provide a base64-encoded representation of the value, or the value-json field should be used to provide a JSON-formatted representation of the value for controls that support it.

    The criticality for this control should generally be true, especially if it embeds any controls with a criticality of true. Any controls embedded in the value of this control will be processed by the server with the criticality of that embedded control.
    See Also:
    JSONFormattedResponseControl, Serialized Form
    • Constructor Detail

      • JSONFormattedRequestControl

        public JSONFormattedRequestControl​(@NotNull
                                           Control control)
                                    throws LDAPException
        Creates a new instance of this control that is decoded from the provided generic control. Note that if the provided control has a value, it will be validated to ensure that it is a JSON object containing only a controls field whose value is an array of JSON objects that appear to be well-formed generic JSON controls, but it will not make any attempt to validate in a control-specific manner.
        Parameters:
        control - The control to decode as a JSON-formatted request control.
        Throws:
        LDAPException - If a problem is encountered while attempting to decode the provided control as a JSON-formatted request control.
    • Method Detail

      • createEmptyControl

        @NotNull
        public static JSONFormattedRequestControl createEmptyControl​(boolean isCritical)
        Creates a new JSONFormattedRequestControl without any embedded controls. This may be used to indicate that no request controls are needed, but the server should return any response controls in a JSONFormattedResponseControl.
        Parameters:
        isCritical - Indicates whether this control should be considered critical.
        Returns:
        The JSONFormattedRequestControl that was created.
      • createWithControls

        @NotNull
        public static JSONFormattedRequestControl createWithControls​(boolean isCritical,
                                                                     @Nullable
                                                                     Control... controls)
        Creates a new JSONFormattedRequestControl with the provided set of embedded controls.
        Parameters:
        isCritical - Indicates whether the control should be considered critical. This should generally be true, although it is acceptable for it to be false if there are no embedded controls, or if all of the embedded controls have a criticality of false.
        controls - The collection of controls to embed within this request control. This may be null or empty if the request should not have any embedded controls.
        Returns:
        The JSONFormattedRequestControl that was created.
      • createWithControls

        @NotNull
        public static JSONFormattedRequestControl createWithControls​(boolean isCritical,
                                                                     @Nullable
                                                                     java.util.Collection<Control> controls)
        Creates a new JSONFormattedRequestControl with the provided set of embedded controls.
        Parameters:
        isCritical - Indicates whether the control should be considered critical. This should generally be true, although it is acceptable for it to be false if there are no embedded controls, or if all of the embedded controls have a criticality of false.
        controls - The collection of controls to embed within this request control. This may be null or empty if the request should not have any embedded controls.
        Returns:
        The JSONFormattedRequestControl that was created.
      • createWithControlObjects

        @NotNull
        public static JSONFormattedRequestControl createWithControlObjects​(boolean isCritical,
                                                                           @Nullable
                                                                           JSONObject... controlObjects)
        Creates a new JSONFormattedRequestControl with the provided set of embedded JSON objects.
        Parameters:
        isCritical - Indicates whether the control should be considered critical. This should generally be true, although it is acceptable for it to be false if there are no embedded controls, or if all of the embedded controls have a criticality of false.
        controlObjects - The collection of JSON objects that represent the encoded controls to embed within this request control. This may be null or empty if the request should not have any embedded controls. Note that no attempt will be made to validate the JSON objects as controls.
        Returns:
        The JSONFormattedRequestControl that was created.
      • createWithControlObjects

        @NotNull
        public static JSONFormattedRequestControl createWithControlObjects​(boolean isCritical,
                                                                           @Nullable
                                                                           java.util.Collection<JSONObject> controlObjects)
        Creates a new JSONFormattedRequestControl with the provided set of embedded JSON objects.
        Parameters:
        isCritical - Indicates whether the control should be considered critical. This should generally be true, although it is acceptable for it to be false if there are no embedded controls, or if all of the embedded controls have a criticality of false.
        controlObjects - The collection of JSON objects that represent the encoded controls to embed within this request. This may be null or empty if the request control should not have any embedded controls. Note that no attempt will be made to validate the JSON objects as controls.
        Returns:
        The JSONFormattedRequestControl that was created.
      • getControlObjects

        @NotNull
        public java.util.List<JSONObjectgetControlObjects()
        Retrieves a list of the JSON objects that represent the embedded request controls. These JSON objects may not have been validated to ensure that they represent valid controls.
        Returns:
        A list of the JSON objects that represent the embedded request controls. It may be empty if there are no embedded request controls.
      • decodeEmbeddedControls

        @NotNull
        public java.util.List<ControldecodeEmbeddedControls​(@NotNull
                                                              JSONFormattedControlDecodeBehavior behavior,
                                                              @Nullable
                                                              java.util.List<java.lang.String> nonFatalDecodeMessages)
                                                       throws LDAPException
        Attempts to retrieve a decoded representation of the embedded request controls using the specified behavior.
        Parameters:
        behavior - The behavior to use when parsing JSON objects as controls. It must not be null.
        nonFatalDecodeMessages - An optional list that may be updated with messages about any JSON objects that could not be parsed as valid controls, but that should not result in an exception as per the provided behavior. This may be null if no such messages are desired. If it is non-null, then the list must be updatable.
        Returns:
        A decoded representation of the embedded request controls, or an empty list if there are no embedded request controls or if none of the embedded JSON objects can be parsed as valid controls but that should not result in an exception as per the provided behavior.
        Throws:
        LDAPException - If any of the JSON objects cannot be parsed as a valid control
      • getControlName

        @NotNull
        public java.lang.String getControlName()
        Retrieves the user-friendly name for this control, if available. If no user-friendly name has been defined, then the OID will be returned.
        Overrides:
        getControlName in class Control
        Returns:
        The user-friendly name for this control, or the OID if no user-friendly name is available.
      • toJSONControl

        @NotNull
        public JSONObject toJSONControl()
        Retrieves a representation of this JSON-formatted request control as a JSON object. The JSON object uses the following fields:
        • oid -- A mandatory string field whose value is the object identifier for this control. For the JSON-formatted request control, the OID is "1.3.6.1.4.1.30221.2.5.64".
        • control-name -- An optional string field whose value is a human-readable name for this control. This field is only intended for descriptive purposes, and when decoding a control, the oid field should be used to identify the type of control.
        • criticality -- A mandatory Boolean field used to indicate whether this control is considered critical.
        • value-base64 -- An optional string field whose value is a base64-encoded representation of the raw value for this JSON-formatted request control. At most one of the value-base64 and value-json fields must be present.
        • value-json -- An optional JSON object field whose value is a user-friendly representation of the value for this JSON-formatted request control. At most one of the value-base64 and value-json fields must be present, and if the value-json field is used, then it will use the following fields:
          • controls -- An mandatory array field whose values are JSON objects that represent the JSON-formatted request controls to send to the server.
        Overrides:
        toJSONControl in class Control
        Returns:
        A JSON object that contains a representation of this control.
      • decodeJSONControl

        @NotNull
        public static JSONFormattedRequestControl decodeJSONControl​(@NotNull
                                                                    JSONObject controlObject,
                                                                    boolean strict)
                                                             throws LDAPException
        Attempts to decode the provided object as a JSON representation of a JSON-formatted request control.
        Parameters:
        controlObject - The JSON object to be decoded. It must not be null.
        strict - Indicates whether to use strict mode when decoding the provided JSON object. If this is true, then this method will throw an exception if the provided JSON object contains any unrecognized fields. If this is false, then unrecognized fields will be ignored.
        Returns:
        The JSON-formatted request control that was decoded from the provided JSON object.
        Throws:
        LDAPException - If the provided JSON object cannot be parsed as a valid JSON-formatted request control.
      • toString

        public void toString​(@NotNull
                             java.lang.StringBuilder buffer)
        Appends a string representation of this LDAP control to the provided buffer.
        Overrides:
        toString in class Control
        Parameters:
        buffer - The buffer to which to append the string representation of this buffer.