@Override
    public JDefinedClass apply(String nodeName, JsonNode node, JsonNode parent, JDefinedClass jclass, Schema schema) {
        if (node == null) {
            node = JsonNodeFactory.instance.objectNode();
        }

        for (Iterator<String> properties = node.fieldNames(); properties.hasNext(); ) {
            String property = properties.next();

            ruleFactory.getPropertyRule().apply(property, node.get(property), node, jclass,
                                                ruleFactory.resolveSchemaRef(schema, "properties/" + property));
        }

        if (ruleFactory.getGenerationConfig().isGenerateBuilders() && !jclass._extends().name().equals("Object")) {
            addOverrideBuilders(jclass, jclass.owner()._getClass(jclass._extends().fullName()));
        }

        ruleFactory.getAnnotator().propertyOrder(jclass, node);

        return jclass;
    }
@Override
    public JDefinedClass apply(String nodeName, JsonNode node, JsonNode parent, JDefinedClass jclass, Schema schema)