/* * @(#)ExtendedRequest.java 1.9 03/12/19 * * Copyright 2004 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package javax.naming.ldap; import javax.naming.NamingException; /** * This interface represents an LDAPv3 extended operation request as defined in * RFC 2251. *
  *     ExtendedRequest ::= [APPLICATION 23] SEQUENCE {
  *              requestName      [0] LDAPOID,
  *              requestValue     [1] OCTET STRING OPTIONAL }
  * 
* It comprises an object identifier string and an optional ASN.1 BER * encoded value. *

* The methods in this class are used by the service provider to construct * the bits to send to the LDAP server. Applications typically only deal with * the classes that implement this interface, supplying them with * any information required for a particular extended operation request. * It would then pass such a class as an argument to the * LdapContext.extendedOperation() method for performing the * LDAPv3 extended operation. *

* For example, suppose the LDAP server supported a 'get time' extended operation. * It would supply GetTimeRequest and GetTimeResponse classes: *

  * public class GetTimeRequest implements ExtendedRequest {
  *     public GetTimeRequest() {... };
  *     public ExtendedResponse createExtendedResponse(String id, 
  * 	    byte[] berValue, int offset, int length) 
  *	    throws NamingException {
  *         return new GetTimeResponse(id, berValue, offset, length);
  *     }
  *     ...
  * }
  * public class GetTimeResponse implements ExtendedResponse {
  *     long time;
  *     public GetTimeResponse(String id, byte[] berValue, int offset, 
  * 	    int length) throws NamingException {
  *         time =	... // decode berValue to get time
  *     }
  *     public java.util.Date getDate() { return new java.util.Date(time) };
  *     public long getTime() { return time };
  *     ...
  * }
  *
* A program would use then these classes as follows: *
  * GetTimeResponse resp =
  * 	(GetTimeResponse) ectx.extendedOperation(new GetTimeRequest());
  * long time = resp.getTime();
  *
* * @author Rosanna Lee * @author Scott Seligman * @author Vincent Ryan * @version 1.9 03/12/19 * * @see ExtendedResponse * @see LdapContext#extendedOperation * @since 1.3 */ public interface ExtendedRequest extends java.io.Serializable { /** * Retrieves the object identifier of the request. * * @return The non-null object identifier string representing the LDAP * ExtendedRequest.requestName component. */ public String getID(); /** * Retrieves the ASN.1 BER encoded value of the LDAP extended operation * request. Null is returned if the value is absent. * * The result is the raw BER bytes including the tag and length of * the request value. It does not include the request OID. * This method is called by the service provider to get the bits to * put into the extended operation to be sent to the LDAP server. * * @return A possibly null byte array representing the ASN.1 BER encoded * contents of the LDAP ExtendedRequest.requestValue * component. * @exception IllegalStateException If the encoded value cannot be retrieved * because the request contains insufficient or invalid data/state. */ public byte[] getEncodedValue(); /** * Creates the response object that corresponds to this request. *

* After the service provider has sent the extended operation request * to the LDAP server, it will receive a response from the server. * If the operation failed, the provider will throw a NamingException. * If the operation succeeded, the provider will invoke this method * using the data that it got back in the response. * It is the job of this method to return a class that implements * the ExtendedResponse interface that is appropriate for the * extended operation request. *

* For example, a Start TLS extended request class would need to know * how to process a Start TLS extended response. It does this by creating * a class that implements ExtendedResponse. * * @param id The possibly null object identifier of the response * control. * @param berValue The possibly null ASN.1 BER encoded value of the * response control. * This is the raw BER bytes including the tag and length of * the response value. It does not include the response OID. * @param offset The starting position in berValue of the bytes to use. * @param length The number of bytes in berValue to use. * * @return A non-null object. * @exception NamingException if cannot create extended response * due to an error. * @see ExtendedResponse */ public ExtendedResponse createExtendedResponse(String id, byte[] berValue, int offset, int length) throws NamingException; // static final long serialVersionUID = -7560110759229059814L; }