code: private Object extractObjectWithContext(Object pValue, Stack<String> pExtraArgs, JsonConvertOptions pOpts, boolean pJsonify)
              throws AttributeNotFoundException {
          Object jsonResult;
          setupContext(pOpts);
          try {
              jsonResult = extractObject(pValue, pExtraArgs, pJsonify);
          } catch (ValueFaultHandler.AttributeFilteredException exp) {
              jsonResult = null;
          } finally {
              clearContext();
          }
          return jsonResult;
      }
docs: Handle a value which means to dive into the internal of a complex object
  (if <code>pExtraArgs</code> is not null) and/or to convert
  it to JSON (if <code>pJsonify</code> is true).
  
  
  @param pValue value to extract from
  @param pExtraArgs stack used for diving in to the value
  @param pOpts options from which various processing
  parameters (like maxDepth, maxCollectionSize and maxObjects) are taken and put
  into context in order to influence the object traversal.
  @param pJsonify whether the result should be returned as an JSON object
  @return extracted value, either natively or as JSON
  @throws AttributeNotFoundException if during traversal an attribute is not found as specified in the stack