@SuppressWarnings("unchecked")
    public static <T> T convertValue(JsonNode node, Class<T> clazz) {
        if (node instanceof POJONode) {
            return convertValue(DPathUtils.extractValue((POJONode) node), clazz);
        }
        if (clazz == null) {
            throw new NullPointerException("Class parameter is null!");
        }
        if (node == null || node instanceof NullNode || node instanceof MissingNode) {
            return null;
        }
        if (node instanceof POJONode) {
            return convertValue(DPathUtils.extractValue((POJONode) node), clazz);
        }
        if (Number.class.isAssignableFrom(clazz) || byte.class == clazz || short.class == clazz
                || int.class == clazz || long.class == clazz || float.class == clazz
                || double.class == clazz) {
            return convertNumber(node, clazz);
        }
        if (clazz == Boolean.class || clazz == boolean.class) {
            return (T) convertBoolean(node);
        }
        if (clazz == Character.class || clazz == char.class) {
            return (T) convertChar(node);
        }
        if (Date.class.isAssignableFrom(clazz)) {
            return (T) convertDate(node);
        }
        if (Object[].class.isAssignableFrom(clazz) || List.class.isAssignableFrom(clazz)) {
            return (T) convertArrayOrList(node);
        }
        if (clazz.isAssignableFrom(node.getClass())) {
            return (T) node;
        }
        if (clazz == String.class) {
            return (T) (node.isTextual() ? node.asText() : node.toString());
        }
        throw new IllegalArgumentException(
                "Cannot convert an object of type [" + node.getClass() + "] to [" + clazz + "]!");
    }
@ SuppressWarnings ( "unchecked" ) public static < T > T convertValue ( JsonNode node , Class < T > clazz ) { if ( node instanceof POJONode ) { return convertValue ( DPathUtils . extractValue ( ( POJONode ) node ) , clazz ) ; } if ( clazz == null ) { throw new NullPointerException ( "Class parameter is null!" ) ; } if ( node == null || node instanceof NullNode || node instanceof MissingNode ) { return null ; } if ( node instanceof POJONode ) { return convertValue ( DPathUtils . extractValue ( ( POJONode ) node ) , clazz ) ; } if ( Number . class . isAssignableFrom ( clazz ) || byte . class == clazz || short . class == clazz || int . class == clazz || long . class == clazz || float . class == clazz || double . class == clazz ) { return convertNumber ( node , clazz ) ; } if ( clazz == Boolean . class || clazz == boolean . class ) { return ( T ) convertBoolean ( node ) ; } if ( clazz == Character . class || clazz == char . class ) { return ( T ) convertChar ( node ) ; } if ( Date . class . isAssignableFrom ( clazz ) ) { return ( T ) convertDate ( node ) ; } if ( Object [ ] . class . isAssignableFrom ( clazz ) || List . class . isAssignableFrom ( clazz ) ) { return ( T ) convertArrayOrList ( node ) ; } if ( clazz . isAssignableFrom ( node . getClass ( ) ) ) { return ( T ) node ; } if ( clazz == String . class ) { return ( T ) ( node . isTextual ( ) ? node . asText ( ) : node . toString ( ) ) ; } throw new IllegalArgumentException ( "Cannot convert an object of type [" + node . getClass ( ) + "] to [" + clazz + "]!" ) ; }
Convert a {@link JsonNode} to a specified value type.

@param node
@param clazz
@return
@since 0.6.2