Example usage for com.fasterxml.jackson.databind.node ArrayNode get

List of usage examples for com.fasterxml.jackson.databind.node ArrayNode get

Introduction

In this page you can find the example usage for com.fasterxml.jackson.databind.node ArrayNode get.

Prototype

public JsonNode get(String paramString) 

Source Link

Usage

From source file:net.sf.jasperreports.engine.json.expression.member.evaluation.ObjectKeyExpressionEvaluator.java

private JRJsonNode goDeeperIntoObjectNode(JRJsonNode jrJsonNode, boolean keepMissingNode) {
    ObjectNode dataNode = (ObjectNode) jrJsonNode.getDataNode();
    ArrayNode container = getEvaluationContext().getObjectMapper().createArrayNode();

    // A complex expression allows an object key to treated as a REGEX
    if (expression.isComplex()) {
        Iterator<String> fieldNamesIterator = dataNode.fieldNames();
        while (fieldNamesIterator.hasNext()) {
            String fieldName = fieldNamesIterator.next();
            Matcher fieldNameMatcher = fieldNamePattern.matcher(fieldName);

            if (fieldNameMatcher.matches()) {
                JsonNode deeperNode = dataNode.path(fieldName);

                // if the deeper node is object/value => filter and add it
                if (deeperNode.isObject() || deeperNode.isValueNode() || deeperNode.isArray()) {

                    JRJsonNode child = jrJsonNode.createChild(deeperNode);
                    if (applyFilter(child)) {
                        container.add(deeperNode);
                    }//from  w w w .j a va  2s  .c o  m
                }
            }
        }
    } else {
        JsonNode deeperNode = dataNode.path(expression.getObjectKey());

        // if the deeper node is object/value => filter and add it
        if (deeperNode.isObject() || deeperNode.isValueNode() || deeperNode.isArray()) {

            JRJsonNode child = jrJsonNode.createChild(deeperNode);
            if (applyFilter(child)) {
                container.add(deeperNode);
            }
        }
    }

    if (container.size() > 1) {
        return jrJsonNode.createChild(container);
    } else if (container.size() == 1) {
        return jrJsonNode.createChild(container.get(0));
    }
    // Filtering expressions need the missing node to check for null
    else if (keepMissingNode) {
        return jrJsonNode.createChild(MissingNode.getInstance());
    }

    return null;
}

From source file:org.flowable.cmmn.editor.json.converter.CmmnJsonConverter.java

public CmmnModel convertToCmmnModel(JsonNode modelNode, Map<String, String> formKeyMap,
        Map<String, String> decisionTableKeyMap, Map<String, String> caseModelKeyMap,
        Map<String, String> processModelKeyMap) {

    CmmnModel cmmnModel = new CmmnModel();
    CmmnModelIdHelper cmmnModelIdHelper = new CmmnModelIdHelper();

    cmmnModel.setTargetNamespace("http://flowable.org/test");
    Map<String, JsonNode> shapeMap = new HashMap<>();
    Map<String, JsonNode> sourceRefMap = new HashMap<>();
    Map<String, JsonNode> edgeMap = new HashMap<>();
    Map<String, List<JsonNode>> sourceAndTargetMap = new HashMap<>();

    readShapeInfo(modelNode, shapeMap, sourceRefMap);
    filterAllEdges(modelNode, edgeMap, sourceAndTargetMap, shapeMap, sourceRefMap);

    ArrayNode shapesArrayNode = (ArrayNode) modelNode.get(EDITOR_CHILD_SHAPES);

    if (shapesArrayNode == null || shapesArrayNode.size() == 0) {
        return cmmnModel;
    }/*from  w  w w  . j  a  v  a2s  . c o m*/

    Case caseModel = new Case();
    cmmnModel.getCases().add(caseModel);
    caseModel.setId(CmmnJsonConverterUtil.getPropertyValueAsString(PROPERTY_CASE_ID, modelNode));
    caseModel.setName(CmmnJsonConverterUtil.getPropertyValueAsString(PROPERTY_NAME, modelNode));
    caseModel.setInitiatorVariableName(
            CmmnJsonConverterUtil.getPropertyValueAsString(PROPERTY_CASE_INITIATOR_VARIABLE_NAME, modelNode));
    if (StringUtils.isEmpty(caseModel.getInitiatorVariableName())) {
        caseModel.setInitiatorVariableName("initiator");
    }

    String namespace = CmmnJsonConverterUtil.getPropertyValueAsString(PROPERTY_CASE_NAMESPACE, modelNode);
    if (StringUtils.isNotEmpty(namespace)) {
        cmmnModel.setTargetNamespace(namespace);
    }
    caseModel.setDocumentation(
            CmmnJsonConverterUtil.getPropertyValueAsString(PROPERTY_DOCUMENTATION, modelNode));

    JsonNode planModelShape = shapesArrayNode.get(0);

    JsonNode planModelShapesArray = planModelShape.get(EDITOR_CHILD_SHAPES);
    Stage planModelStage = new Stage();
    planModelStage.setId(CmmnJsonConverterUtil.getElementId(planModelShape));
    planModelStage.setName(CmmnJsonConverterUtil.getPropertyValueAsString(PROPERTY_NAME, planModelShape));
    planModelStage.setPlanModel(true);

    caseModel.setPlanModel(planModelStage);

    processJsonElements(planModelShapesArray, modelNode, planModelStage, shapeMap, formKeyMap,
            decisionTableKeyMap, caseModelKeyMap, processModelKeyMap, cmmnModel, cmmnModelIdHelper);

    List<String> planModelExitCriteriaRefs = new ArrayList<>();
    for (JsonNode shapeNode : shapesArrayNode) {
        // associations are now all on root level
        if (STENCIL_ASSOCIATION.equalsIgnoreCase(CmmnJsonConverterUtil.getStencilId(shapeNode))) {
            AssociationJsonConverter associationConverter = new AssociationJsonConverter();
            Association association = associationConverter.convertJsonToElement(shapeNode, modelNode, this,
                    planModelStage, shapeMap, cmmnModel, cmmnModelIdHelper);
            cmmnModel.addAssociation(association);

            // exit criteria for the plan model are on the root level
        } else if (STENCIL_EXIT_CRITERION.equalsIgnoreCase(CmmnJsonConverterUtil.getStencilId(shapeNode))) {
            JsonNode resourceNode = shapeNode.get(EDITOR_SHAPE_ID);
            if (resourceNode != null) {
                planModelExitCriteriaRefs.add(resourceNode.asText());
                CriterionJsonConverter criterionJsonConverter = new CriterionJsonConverter();
                criterionJsonConverter.convertJsonToElement(shapeNode, modelNode, this, planModelStage,
                        shapeMap, cmmnModel, cmmnModelIdHelper);
            }
        }
    }

    readShapeDI(modelNode, 0, 0, cmmnModel);
    readEdgeDI(edgeMap, sourceAndTargetMap, cmmnModel);

    // post handling of process elements
    Map<String, List<Association>> associationMap = postProcessAssociations(cmmnModel);
    postProcessElements(planModelStage, planModelStage.getPlanItems(), edgeMap, associationMap, cmmnModel,
            cmmnModelIdHelper);

    // Create sentries for exit criteria on plan model
    createSentryParts(planModelExitCriteriaRefs, planModelStage, associationMap, cmmnModel, cmmnModelIdHelper,
            null, planModelStage);

    return cmmnModel;
}

From source file:org.wrml.runtime.schema.generator.SchemaGenerator.java

private Value generateValue(final JsonSchema jsonSchema, final JsonSchema.Property property)
        throws SchemaGeneratorException {

    if (property == null) {
        throw new SchemaGeneratorException("Failed to generate a Value", null, this);
    }/*from w w w. j  a v a2  s .  co m*/

    final URI schemaUri = jsonSchema.getId();
    if (schemaUri == null) {
        throw new SchemaGeneratorException("Failed to generate a Value", null, this);
    }

    final JsonType jsonType = property.getJsonType();
    if (jsonType == null) {
        throw new SchemaGeneratorException("Failed to generate a Value", null, this);
    }

    final Context context = getContext();
    final SchemaLoader schemaLoader = context.getSchemaLoader();

    final ValueType valueType = getValueType(jsonType);
    Value value = null;

    switch (valueType) {

    case Boolean: {
        final BooleanValue booleanValue = context.newModel(BooleanValue.class);

        final JsonNode defaultNode = property.getValueNode(PropertyType.Default);
        if (defaultNode != null) {
            booleanValue.setDefault(defaultNode.asBoolean());
        }

        value = booleanValue;
        break;
    }
    case Date: {
        break;
    }
    case Double: {
        final DoubleValue doubleValue = context.newModel(DoubleValue.class);

        final JsonNode defaultNode = property.getValueNode(PropertyType.Default);
        if (defaultNode != null) {
            doubleValue.setDefault(defaultNode.asDouble());
        }

        final JsonNode maximumNode = property.getValueNode(PropertyType.Maximum);
        if (maximumNode != null) {
            doubleValue.setMaximum(maximumNode.asDouble());
        }

        final JsonNode minimumNode = property.getValueNode(PropertyType.Minimum);
        if (minimumNode != null) {
            doubleValue.setMinimum(minimumNode.asDouble());
        }

        value = doubleValue;
        break;
    }
    case Integer: {
        final IntegerValue integerValue = context.newModel(IntegerValue.class);

        final JsonNode defaultNode = property.getValueNode(PropertyType.Default);
        if (defaultNode != null) {
            integerValue.setDefault(defaultNode.asInt());
        }

        final JsonNode divisibleByNode = property.getValueNode(PropertyType.DivisibleBy);
        if (divisibleByNode != null) {
            integerValue.setDivisibleBy(divisibleByNode.asInt());
        }

        final JsonNode multipleOfNode = property.getValueNode(PropertyType.MultipleOf);
        if (multipleOfNode != null) {
            integerValue.setDivisibleBy(multipleOfNode.asInt());
        }

        final JsonNode maximumNode = property.getValueNode(PropertyType.Maximum);
        if (maximumNode != null) {
            integerValue.setMaximum(maximumNode.asInt());
        }

        final JsonNode minimumNode = property.getValueNode(PropertyType.Minimum);
        if (minimumNode != null) {
            integerValue.setMinimum(minimumNode.asInt());
        }

        value = integerValue;
        break;
    }
    case Link:
        // NOTE: Falling through the Link switch case on purpose to treat same as Model
        // TODO: Revisit this design.
    case Model: {

        final ModelValue modelValue = context.newModel(ModelValue.class);
        final JsonSchemaLoader jsonSchemaLoader = schemaLoader.getJsonSchemaLoader();
        final JsonSchema modelJsonSchema;

        final URI baseSchemaUri;
        final JsonNode schemaIdNode = property.getValueNode(PropertyType.Id);
        if (schemaIdNode != null) {
            baseSchemaUri = schemaLoader.getDocumentSchemaUri();

            final URI modelSchemaUri = property.getValue(PropertyType.Id);
            if (modelSchemaUri != schemaUri) {
                try {
                    modelJsonSchema = jsonSchemaLoader.load(modelSchemaUri);
                } catch (final IOException e) {
                    throw new SchemaGeneratorException(e.getMessage(), e, this);
                }
            } else {
                modelJsonSchema = jsonSchema;
            }
        } else {

            baseSchemaUri = schemaLoader.getEmbeddedSchemaUri();

            String modelSchemaUriString = schemaUri.toString();

            if (modelSchemaUriString.endsWith(".json")) {
                modelSchemaUriString = modelSchemaUriString.substring(0,
                        modelSchemaUriString.length() - ".json".length());
            }

            int innerClassNumber = 0;

            if (_InnerSchemaCountMap.containsKey(schemaUri)) {
                innerClassNumber = _InnerSchemaCountMap.get(schemaUri);
            }

            innerClassNumber++;

            _InnerSchemaCountMap.put(schemaUri, innerClassNumber);

            final String annonymousInnerSchemaName = ANNONYMOUS_INNER_SCHEMA_PREFIX
                    + String.valueOf(innerClassNumber);

            modelSchemaUriString = modelSchemaUriString.concat(annonymousInnerSchemaName);

            final ObjectNode propertyNode = property.getPropertyNode();
            propertyNode.put(PropertyType.Id.getName(), modelSchemaUriString);

            final URI modelSchemaUri = URI.create(modelSchemaUriString);

            modelJsonSchema = jsonSchemaLoader.load(propertyNode, modelSchemaUri);
        }

        if (modelJsonSchema != jsonSchema) {

            schemaLoader.load(modelJsonSchema, baseSchemaUri);
        }

        modelValue.setModelSchemaUri(modelJsonSchema.getId());

        value = modelValue;
        break;
    }
    case List: {
        final ListValue listValue = context.newModel(ListValue.class);

        final JsonNode uniqueItemsNode = property.getValueNode(PropertyType.UniqueItems);
        if (uniqueItemsNode != null) {
            listValue.setElementUniquenessConstrained(uniqueItemsNode.asBoolean());
        }

        final JsonNode maxItemsNode = property.getValueNode(PropertyType.MaxItems);
        if (maxItemsNode != null) {
            listValue.setMaximumSize(maxItemsNode.asInt());
        }

        final JsonNode minItemsNode = property.getValueNode(PropertyType.MinItems);
        if (minItemsNode != null) {
            listValue.setMinimumSize(minItemsNode.asInt());
        }

        final JsonNode itemsNode = property.getValueNode(PropertyType.Items);
        ObjectNode itemNode = null;
        if (itemsNode instanceof ObjectNode) {
            itemNode = (ObjectNode) itemsNode;

        } else if (itemsNode instanceof ArrayNode) {

            final ArrayNode itemsArrayNode = (ArrayNode) itemsNode;
            if (itemsArrayNode.has(0)) {
                itemNode = (ObjectNode) itemsArrayNode.get(0);
            }
        }

        if (itemNode != null) {
            Property itemsProperty;
            try {
                itemsProperty = new Property(jsonSchema, PropertyType.Items.getName(), itemNode);
                final Value elementValue = generateValue(jsonSchema, itemsProperty);
                final Slot elementSlot = context.newModel(Slot.class);
                elementSlot.setName("E");
                elementSlot.setValue(elementValue);
                listValue.setElementSlot(elementSlot);
            } catch (final IOException e) {
                throw new SchemaGeneratorException(e.getMessage(), e, this);
            }
        }

        value = listValue;
        break;
    }
    case Long: {
        final LongValue longValue = context.newModel(LongValue.class);

        final JsonNode defaultNode = property.getValueNode(PropertyType.Default);
        if (defaultNode != null) {
            longValue.setDefault(defaultNode.asLong());
        }

        final JsonNode divisibleByNode = property.getValueNode(PropertyType.DivisibleBy);
        if (divisibleByNode != null) {
            longValue.setDivisibleBy(divisibleByNode.asLong());
        }

        final JsonNode multipleOfNode = property.getValueNode(PropertyType.MultipleOf);
        if (multipleOfNode != null) {
            longValue.setDivisibleBy(multipleOfNode.asLong());
        }

        final JsonNode maximumNode = property.getValueNode(PropertyType.Maximum);
        if (maximumNode != null) {
            longValue.setMaximum(maximumNode.asLong());
        }

        final JsonNode minimumNode = property.getValueNode(PropertyType.Minimum);
        if (minimumNode != null) {
            longValue.setMinimum(minimumNode.asLong());
        }

        value = longValue;
        break;
    }
    case Native: {
        break;
    }
    case SingleSelect: {
        final SingleSelectValue singleSelectValue = context.newModel(SingleSelectValue.class);
        value = singleSelectValue;
        break;
    }
    case Text: {
        final TextValue textValue = context.newModel(TextValue.class);

        final JsonNode defaultNode = property.getValueNode(PropertyType.Default);
        if (defaultNode != null) {
            textValue.setDefault(defaultNode.asText());
        }

        final JsonNode maxLengthNode = property.getValueNode(PropertyType.MaxLength);
        if (maxLengthNode != null) {
            textValue.setMaximumLength(maxLengthNode.asInt());
        }

        final JsonNode minLengthNode = property.getValueNode(PropertyType.MinLength);
        if (minLengthNode != null) {
            textValue.setMinimumLength(minLengthNode.asInt());
        }

        final JsonNode formatNode = property.getValueNode(PropertyType.Format);
        if (formatNode != null) {

            final String formatKeyword = formatNode.asText();
            final JsonStringFormat jsonStringFormat = JsonStringFormat.forKeyword(formatKeyword);
            if (jsonStringFormat != null) {
                final Class<?> formatJavaType = jsonStringFormat.getJavaType();
                final SyntaxLoader syntaxLoader = context.getSyntaxLoader();
                final URI syntaxUri = syntaxLoader.getSyntaxUri(formatJavaType);
                textValue.setSyntaxUri(syntaxUri);
            }
        }

        textValue.getDisallowedValues();

        value = textValue;

        break;
    }
    default: {
        break;
    }
    }

    if (value instanceof MaybeRequired) {
        final JsonNode requiredNode = property.getValueNode(PropertyType.Required);
        if (requiredNode != null) {
            ((MaybeRequired) value).setRequired(requiredNode.asBoolean());
        }
    }

    if (value instanceof NumericValue) {
        final NumericValue numericValue = (NumericValue) value;

        final JsonNode exclusiveMaximumNode = property.getValueNode(PropertyType.ExclusiveMaximum);
        if (exclusiveMaximumNode != null) {
            numericValue.setExclusiveMaximum(exclusiveMaximumNode.asBoolean());
        }

        final JsonNode exclusiveMinimumNode = property.getValueNode(PropertyType.ExclusiveMinimum);
        if (exclusiveMinimumNode != null) {
            numericValue.setExclusiveMinimum(exclusiveMinimumNode.asBoolean());
        }
    }

    return value;

}

From source file:com.google.api.server.spi.tools.AnnotationApiConfigGeneratorTest.java

private void verifyEndpoint1(Class<? extends Endpoint1> serviceClass, JsonNode root) {
    verifyApi(root, "thirdParty.api", "https://myapp.appspot.com/_ah/api", "myapi", "v1", "API for testing",
            "https://myapp.appspot.com/_ah/spi", true, true, new String[] { "CU" });

    verifyFrontendLimits(root.path("frontendLimits"), 1, 2, 3);

    ArrayNode rules = (ArrayNode) root.path("frontendLimits").path("rules");
    verifyFrontendLimitRule(rules.get(0), "match0", 1, 2, 3, "analyticsId0");
    verifyFrontendLimitRule(rules.get(1), "match10", 11, 12, 13, "analyticsId10");

    verifyCacheControl(root.path("cacheControl"), ApiCacheControl.Type.PUBLIC, 1);

    JsonNode methods = root.path("methods");
    String serviceClassName = serviceClass.getName();

    // myapi.foos.listFoos
    JsonNode methodListFoos = methods.path("myapi.foos.list");
    verifyMethod(methodListFoos, "foos", HttpMethod.GET, serviceClassName + ".listFoos",
            "autoTemplate(backendResponse)");
    verifyMethodRequest(methodListFoos.path("request"), "empty", 0);
    verifyStrings(objectMapper.convertValue(methodListFoos.path("scopes"), String[].class),
            new String[] { "s0", "s1 s2" });
    verifyStrings(objectMapper.convertValue(methodListFoos.path("audiences"), String[].class),
            new String[] { "a0", "a1" });
    verifyStrings(objectMapper.convertValue(methodListFoos.path("clientIds"), String[].class),
            new String[] { "c0", "c1" });

    // myapi.foos.get
    JsonNode methodGetFoo = methods.path("myapi.foos.get");
    verifyMethod(methodGetFoo, "foos/{id}", HttpMethod.GET, serviceClassName + ".getFoo",
            "autoTemplate(backendResponse)");
    verifyMethodRequest(methodGetFoo.path("request"), "empty", 1);
    verifyMethodRequestParameter(methodGetFoo.path("request"), "id", "string", true, false);
    verifyStrings(objectMapper.convertValue(methodGetFoo.path("scopes"), String[].class),
            new String[] { "ss0", "ss1 ss2" });
    verifyStrings(objectMapper.convertValue(methodGetFoo.path("audiences"), String[].class),
            new String[] { "aa0", "aa1" });
    verifyStrings(objectMapper.convertValue(methodGetFoo.path("clientIds"), String[].class),
            new String[] { "cc0", "cc1" });

    // myapi.foos.insert
    JsonNode methodInsertFoo = methods.path("myapi.foos.insert");
    verifyMethod(methodInsertFoo, "foos", HttpMethod.POST, serviceClassName + ".insertFoo",
            "autoTemplate(backendResponse)");
    verifyMethodRequest(methodInsertFoo.path("request"), "autoTemplate(backendRequest)", 0);

    // myapi.foos.update
    JsonNode methodUpdateFoo = methods.path("myapi.foos.update");
    verifyMethod(methodUpdateFoo, "foos/{id}", HttpMethod.PUT, serviceClassName + ".updateFoo",
            "autoTemplate(backendResponse)");
    verifyMethodRequest(methodUpdateFoo.path("request"), "autoTemplate(backendRequest)", 1);
    verifyMethodRequestParameter(methodUpdateFoo.path("request"), "id", "string", true, false);

    // myapi.foos.remove
    JsonNode methodRemoveFoo = methods.path("myapi.foos.remove");
    verifyMethod(methodRemoveFoo, "foos/{id}", HttpMethod.DELETE, serviceClassName + ".removeFoo", "empty");
    verifyMethodRequest(methodRemoveFoo.path("request"), "empty", 1);
    verifyMethodRequestParameter(methodRemoveFoo.path("request"), "id", "string", true, false);

    // myapi.foos.execute0
    JsonNode methodExecute0 = methods.path("myapi.foos.execute0");
    verifyMethod(methodExecute0, "execute0", HttpMethod.POST, serviceClassName + ".execute0",
            "autoTemplate(backendResponse)");
    verifyMethodRequest(methodExecute0.path("request"), "empty", 9);

    JsonNode methodExecute0Request = methodExecute0.path("request");
    verifyMethodRequestParameter(methodExecute0Request, "id", "string", true, false);
    verifyMethodRequestParameter(methodExecute0Request, "i0", "int32", true, false);
    verifyMethodRequestParameter(methodExecute0Request, "i1", "int32", false, false);
    verifyMethodRequestParameter(methodExecute0Request, "long0", "int64", true, false);
    verifyMethodRequestParameter(methodExecute0Request, "long1", "int64", false, false);
    verifyMethodRequestParameter(methodExecute0Request, "b0", "boolean", true, false);
    verifyMethodRequestParameter(methodExecute0Request, "b1", "boolean", false, false);
    verifyMethodRequestParameter(methodExecute0Request, "f", "float", true, false);
    verifyMethodRequestParameter(methodExecute0Request, "d", "double", false, false);

    // myapi.foos.execute2
    JsonNode methodExecute2 = methods.path("myapi.foos.execute2");
    verifyMethod(methodExecute2, "execute2/{serialized}", HttpMethod.POST, serviceClassName + ".execute2",
            "empty");
    JsonNode methodExecute2Request = methodExecute2.path("request");
    verifyMethodRequestParameter(methodExecute2Request, "serialized", "string", true, false);
}

From source file:com.google.api.server.spi.tools.AnnotationApiConfigGeneratorTest.java

private void verifySubclassedOverridingEndpoint(Class<? extends SubclassedOverridingEndpoint> serviceClass,
        JsonNode root) {// w ww . j av  a2 s . co  m
    verifyApi(root, "thirdParty.api", "https://myapp.appspot.com/_ah/api", "myapi", "v2",
            "overridden description", "https://myapp.appspot.com/_ah/spi", true, false);

    verifyFrontendLimits(root.path("frontendLimits"), 1, 4, 3);

    ArrayNode rules = (ArrayNode) root.path("frontendLimits").path("rules");
    verifyFrontendLimitRule(rules.get(0), "match0", 1, 2, 3, "analyticsId0");
    verifyFrontendLimitRule(rules.get(1), "match10", 11, 12, 13, "analyticsId10");

    verifyCacheControl(root.path("cacheControl"), ApiCacheControl.Type.PUBLIC, 2);

    JsonNode methods = root.path("methods");
    String serviceClassName = serviceClass.getName();
    String servicePrefix = "myapi." + serviceClass.getSimpleName();

    // myapi.foos.listFoos
    JsonNode methodListFoos = methods.path("myapi.foos.list");
    verifyMethod(methodListFoos, "foos", HttpMethod.GET, serviceClassName + ".listFoos",
            "autoTemplate(backendResponse)");
    verifyMethodRequest(methodListFoos.path("request"), "empty", 0);
    verifyStrings(objectMapper.convertValue(methodListFoos.path("scopes"), String[].class),
            new String[] { "s0", "s1 s2" });
    verifyStrings(objectMapper.convertValue(methodListFoos.path("audiences"), String[].class),
            new String[] { "a0", "a1" });
    verifyStrings(objectMapper.convertValue(methodListFoos.path("clientIds"), String[].class),
            new String[] { "c0", "c1" });

    // myapi.foos.get
    assertTrue(methods.path(servicePrefix + ".foos.get").isMissingNode());

    // myapi.foos.get2
    JsonNode methodGetFoo = methods.path("myapi.foos.get2");
    verifyMethod(methodGetFoo, "foos/{id}", HttpMethod.GET, serviceClassName + ".getFoo",
            "autoTemplate(backendResponse)");
    verifyMethodRequest(methodGetFoo.path("request"), "empty", 1);
    verifyMethodRequestParameter(methodGetFoo.path("request"), "id", "string", true, false);
    verifyStrings(objectMapper.convertValue(methodGetFoo.path("scopes"), String[].class),
            new String[] { "ss0a", "ss1a" });
    verifyStrings(objectMapper.convertValue(methodGetFoo.path("audiences"), String[].class),
            new String[] { "aa0a", "aa1a" });
    verifyStrings(objectMapper.convertValue(methodGetFoo.path("clientIds"), String[].class),
            new String[] { "cc0a", "cc1a" });

    // myapi.foos.insert
    JsonNode methodInsertFoo = methods.path("myapi.foos.insert");
    verifyMethod(methodInsertFoo, "foos", HttpMethod.POST, serviceClassName + ".insertFoo",
            "autoTemplate(backendResponse)");
    verifyMethodRequest(methodInsertFoo.path("request"), "autoTemplate(backendRequest)", 0);

    // myapi.foos.update
    JsonNode methodUpdateFoo = methods.path("myapi.foos.update");
    verifyMethod(methodUpdateFoo, "foos/{id}", HttpMethod.PUT, serviceClassName + ".updateFoo",
            "autoTemplate(backendResponse)");
    verifyMethodRequest(methodUpdateFoo.path("request"), "autoTemplate(backendRequest)", 1);
    verifyMethodRequestParameter(methodUpdateFoo.path("request"), "id", "string", true, false);

    // myapi.foos.remove
    JsonNode methodRemoveFoo = methods.path("myapi.foos.remove");
    verifyMethod(methodRemoveFoo, "foos/{id}", HttpMethod.DELETE, serviceClassName + ".removeFoo", "empty");
    verifyMethodRequest(methodRemoveFoo.path("request"), "empty", 1);
    verifyMethodRequestParameter(methodRemoveFoo.path("request"), "id", "string", true, false);

    // myapi.foos.execute0
    JsonNode methodExecute0 = methods.path("myapi.foos.execute0");
    verifyMethod(methodExecute0, "execute0", HttpMethod.POST, serviceClassName + ".execute0",
            "autoTemplate(backendResponse)");
    verifyMethodRequest(methodExecute0.path("request"), "empty", 9);
    JsonNode methodExecute0Request = methodExecute0.path("request");
    verifyMethodRequestParameter(methodExecute0Request, "id", "string", true, false);
    verifyMethodRequestParameter(methodExecute0Request, "i0", "int32", true, false);
    verifyMethodRequestParameter(methodExecute0Request, "i1", "int32", false, false);
    verifyMethodRequestParameter(methodExecute0Request, "long0", "int64", true, false);
    verifyMethodRequestParameter(methodExecute0Request, "long1", "int64", false, false);
    verifyMethodRequestParameter(methodExecute0Request, "b0", "boolean", true, false);
    verifyMethodRequestParameter(methodExecute0Request, "b1", "boolean", false, false);
    verifyMethodRequestParameter(methodExecute0Request, "f", "float", true, false);
    verifyMethodRequestParameter(methodExecute0Request, "d", "double", false, false);

    // myapi.foos.execute2
    JsonNode methodExecute2 = methods.path("myapi.foos.execute2");
    verifyMethod(methodExecute2, "execute2/{serialized}", HttpMethod.POST, serviceClassName + ".execute2",
            "empty");
    JsonNode methodExecute2Request = methodExecute2.path("request");
    verifyMethodRequestParameter(methodExecute2Request, "serialized", "int32", true, false);
}

From source file:com.google.api.server.spi.tools.AnnotationApiConfigGeneratorTest.java

private void verifyApi(JsonNode root, String superConfig, String apiRoot, String apiName, String apiVersion,
        String description, String backendRoot, boolean allowCookieAuth, boolean defaultVersion,
        String[] blockedRegions) {
    assertEquals(superConfig, root.path("extends").asText());
    assertEquals(false, root.path("abstract").asBoolean());
    assertEquals(defaultVersion, root.path("defaultVersion").asBoolean());
    assertEquals(apiRoot, root.path("root").asText());
    assertEquals(apiName, root.path("name").asText());
    assertEquals(apiVersion, root.path("version").asText());
    assertEquals(description, root.path("description").asText());

    JsonNode adapter = root.path("adapter");
    assertEquals(backendRoot, adapter.path("bns").asText());

    JsonNode auth = root.path("auth");
    assertEquals(allowCookieAuth, auth.path("allowCookieAuth").asBoolean());

    if (blockedRegions != null) {
        ArrayNode blockedRegionsNode = (ArrayNode) auth.path("blockedRegions");
        for (int i = 0; i < blockedRegions.length; i++) {
            assertEquals(blockedRegions[i], blockedRegionsNode.get(i).asText());
        }/*from  w w w. j a  v a  2 s  . c om*/
    }
}

From source file:io.swagger.v3.parser.util.OpenAPIDeserializer.java

public String inferTypeFromArray(ArrayNode an) {
    if (an.size() == 0) {
        return "string";
    }// w w  w. ja va 2s .co  m
    String type = null;
    for (int i = 0; i < an.size(); i++) {
        JsonNode element = an.get(0);
        if (element.isBoolean()) {
            if (type == null) {
                type = "boolean";
            } else if (!"boolean".equals(type)) {
                type = "string";
            }
        } else if (element.isNumber()) {
            if (type == null) {
                type = "number";
            } else if (!"number".equals(type)) {
                type = "string";
            }
        } else {
            type = "string";
        }
    }

    return type;
}

From source file:com.googlecode.jsonrpc4j.JsonRpcServer.java

/**
 * Finds the {@link Method} from the supplied {@link Set} that
 * best matches the rest of the arguments supplied and returns
 * it as a {@link MethodAndArgs} class.//from   w  w w . j av  a  2  s .co m
 *
 * @param methods the {@link Method}s
 * @param paramCount the number of expect parameters
 * @param paramNodes the parameters for matching types
 * @return the {@link MethodAndArgs}
 */
private MethodAndArgs findBestMethodUsingParamIndexes(Set<Method> methods, int paramCount,
        ArrayNode paramNodes) {

    // get param count
    int numParams = paramNodes != null && !paramNodes.isNull() ? paramNodes.size() : 0;

    // determine param count
    int bestParamNumDiff = Integer.MAX_VALUE;
    Set<Method> matchedMethods = new HashSet<Method>();

    // check every method
    for (Method method : methods) {

        // get parameter types
        Class<?>[] paramTypes = method.getParameterTypes();
        int paramNumDiff = paramTypes.length - paramCount;

        // we've already found a better match
        if (Math.abs(paramNumDiff) > Math.abs(bestParamNumDiff)) {
            continue;

            // we don't allow extra params
        } else if (!allowExtraParams && paramNumDiff < 0 || !allowLessParams && paramNumDiff > 0) {
            continue;

            // check the parameters
        } else {
            if (Math.abs(paramNumDiff) < Math.abs(bestParamNumDiff)) {
                matchedMethods.clear();
            }
            matchedMethods.add(method);
            bestParamNumDiff = paramNumDiff;
            continue;
        }
    }

    // bail early
    if (matchedMethods.isEmpty()) {
        return null;
    }

    // now narrow it down to the best method
    // based on argument types
    Method bestMethod = null;
    if (matchedMethods.size() == 1 || numParams == 0) {
        bestMethod = matchedMethods.iterator().next();

    } else {

        // check the matching methods for
        // matching parameter types
        int mostMatches = -1;
        for (Method method : matchedMethods) {
            List<Class<?>> parameterTypes = getParameterTypes(method);
            int numMatches = 0;
            for (int i = 0; i < parameterTypes.size() && i < numParams; i++) {
                if (isMatchingType(paramNodes.get(i), parameterTypes.get(i))) {
                    numMatches++;
                }
            }
            if (numMatches > mostMatches) {
                mostMatches = numMatches;
                bestMethod = method;
            }
        }
    }

    // create return
    MethodAndArgs ret = new MethodAndArgs();
    ret.method = bestMethod;

    // now fill arguments
    int numParameters = bestMethod.getParameterTypes().length;
    for (int i = 0; i < numParameters; i++) {
        if (i < numParams) {
            ret.arguments.add(paramNodes.get(i));
        } else {
            ret.arguments.add(NullNode.getInstance());
        }
    }

    // return the method
    return ret;
}