private Object parseBean ( int propertyCount , ClassInfo classInfo ) { String propName = "" ; if ( classInfo . metaProperties . length != propertyCount ) { throw new IllegalArgumentException ( "Invalid binary data: Expected " + classInfo . metaProperties . length + " properties but was: " + propertyCount ) ; } try { SerDeserializer deser = settings . getDeserializers ( ) . findDeserializer ( classInfo . type ) ; MetaBean metaBean = deser . findMetaBean ( classInfo . type ) ; BeanBuilder < ? > builder = deser . createBuilder ( classInfo . type , metaBean ) ; for ( MetaProperty < ? > metaProp : classInfo . metaProperties ) { if ( metaProp == null ) { MsgPackInput . skipObject ( input ) ; } else { propName = metaProp . name ( ) ; Object value = parseObject ( SerOptional . extractType ( metaProp , classInfo . type ) , metaProp , classInfo . type , null , false ) ; deser . setValue ( builder , metaProp , SerOptional . wrapValue ( metaProp , classInfo . type , value ) ) ; } propName = "" ; } return deser . build ( classInfo . type , builder ) ; } catch ( Exception ex ) { throw new RuntimeException ( "Error parsing bean: " + classInfo . type . getName ( ) + "::" + propName + ", " + ex . getMessage ( ) , ex ) ; } }
parses the bean using the class information