/**
* Used to Convert an RfcLDAPMessage object to the appropriate
* LDAPIntermediateResponse object depending on the operation being performed.
*
* @param inResponse The LDAPIntermediateResponse object as returned by the
* extendedOperation method in the LDAPConnection object.
* <br><br>
* @return An object of base class LDAPIntermediateResponse. The actual child
* class of this returned object depends on the operation being
* performed.
*
* @exception LDAPException A general exception which includes an error message
* and an LDAP error code.
*/
static public LdapIntermediateResponse convertToIntermediateResponse(RfcLdapMessage inResponse)
// throws LDAPException
{
LdapIntermediateResponse tempResponse = new LdapIntermediateResponse(inResponse);
// Get the oid stored in the Extended response
String inOID = tempResponse.getID();
RespExtensionSet regExtResponses =
LdapIntermediateResponse.getRegisteredResponses();
try{
Type extRespClass = regExtResponses.findResponseExtension(inOID);
if ( extRespClass == null ){
return tempResponse;
}
Type[] argsClass = new Type[]{typeof(RfcLdapMessage)};
Object[] args = { inResponse };
Exception ex;
try{
ConstructorInfo extConstructor = extRespClass.GetConstructor(argsClass);
try{
Object resp = null;
resp = extConstructor.Invoke(args);
return (LdapIntermediateResponse) resp;
} catch (UnauthorizedAccessException e) {
ex = e;
} catch (TargetInvocationException e) {
ex = e;
}
} catch (MissingMethodException e) {
// bad class was specified, fall through and return a
// default LDAPIntermediateResponse object
ex = e;
}
} catch (MissingFieldException e) {
// No match with the OID
// Do nothing. Fall through and construct a default LDAPControl object.
}
// If we get here we did not have a registered extendedresponse
// for this oid. Return a default LDAPIntermediateResponse object.
return tempResponse;
}