public LDAPExtendedOperation extendedOperation( final LDAPExtendedOperation extendedOperation, final LDAPConstraints constraints) throws LDAPException { final ExtendedRequest extendedRequest = new ExtendedRequest( extendedOperation.getID(), new ASN1OctetString(extendedOperation.getValue()), getControls(constraints)); try { final ExtendedResult result = conn.processExtendedOperation(extendedRequest); setResponseControls(result); if (result.getResultCode() != ResultCode.SUCCESS) { throw new LDAPException( result.getDiagnosticMessage(), result.getResultCode().intValue(), result.getDiagnosticMessage(), result.getMatchedDN()); } final byte[] valueBytes; final ASN1OctetString value = result.getValue(); if (value == null) { valueBytes = null; } else { valueBytes = value.getValue(); } return new LDAPExtendedOperation(result.getOID(), valueBytes); } catch (com.hwlcn.ldap.ldap.sdk.LDAPException le) { debugException(le); setResponseControls(le); throw new LDAPException(le); } }