private static function genericConstruct($cpObj = null, $class = null)
 {
     if ($cpObj == null || $class == null) {
         return null;
     }
     $isCollection = false;
     $mapper = array();
     foreach (get_object_vars($cpObj) as $key => $value) {
         if (CitrusPay_Util::isList($value)) {
             $isCollection = true;
             foreach ($value as $i) {
                 array_push($mapper, self::genericConstruct($i, $class));
             }
             break;
         }
     }
     if ($isCollection) {
         $class = $class . "Collection";
     }
     $retObj = new $class();
     foreach (get_object_vars($cpObj) as $key => $value) {
         $setterName = "set_" . $key;
         if (CitrusPay_Util::isList($value)) {
             $value = $mapper;
         }
         if (method_exists($retObj, $setterName)) {
             $retObj->{$setterName}($value);
         }
     }
     return $retObj;
 }
 public function __toArray($recursive = false)
 {
     if ($recursive) {
         return CitrusPay_Util::convertCitrusPayObjectToArray($this->_values);
     } else {
         return $this->_values;
     }
 }