code: private static JSONObject _fromBean( Object bean, JsonConfig jsonConfig ) {
        if( !addInstance( bean ) ){
           try{
              return jsonConfig.getCycleDetectionStrategy()
                    .handleRepeatedReferenceAsObject( bean );
           }catch( JSONException jsone ){
              removeInstance( bean );
              fireErrorEvent( jsone, jsonConfig );
              throw jsone;
           }catch( RuntimeException e ){
              removeInstance( bean );
              JSONException jsone = new JSONException( e );
              fireErrorEvent( jsone, jsonConfig );
              throw jsone;
           }
        }
        fireObjectStartEvent( jsonConfig );
  
        JsonBeanProcessor processor = jsonConfig.findJsonBeanProcessor( bean.getClass() );
        if( processor != null ){
           JSONObject json = null;
           try{
              json = processor.processBean( bean, jsonConfig );
              if( json == null ){
                 json = (JSONObject) jsonConfig.findDefaultValueProcessor( bean.getClass() )
                       .getDefaultValue( bean.getClass() );
                 if( json == null ){
                    json = new JSONObject( true );
                 }
              }
              removeInstance( bean );
              fireObjectEndEvent( jsonConfig );
           }catch( JSONException jsone ){
              removeInstance( bean );
              fireErrorEvent( jsone, jsonConfig );
              throw jsone;
           }catch( RuntimeException e ){
              removeInstance( bean );
              JSONException jsone = new JSONException( e );
              fireErrorEvent( jsone, jsonConfig );
              throw jsone;
           }
           return json;
        }
  
        JSONObject jsonObject = defaultBeanProcessing(bean, jsonConfig);
        removeInstance( bean );
        fireObjectEndEvent( jsonConfig );
        return jsonObject;
     }
docs: Creates a JSONObject from a POJO.<br>
  Supports nested maps, POJOs, and arrays/collections.
  
  @param bean An object with POJO conventions
  @throws JSONException if the bean can not be converted to a proper
  JSONObject.