Example usage for com.fasterxml.jackson.databind ObjectMapper acceptJsonFormatVisitor

List of usage examples for com.fasterxml.jackson.databind ObjectMapper acceptJsonFormatVisitor

Introduction

In this page you can find the example usage for com.fasterxml.jackson.databind ObjectMapper acceptJsonFormatVisitor.

Prototype

public void acceptJsonFormatVisitor(JavaType type, JsonFormatVisitorWrapper visitor)
        throws JsonMappingException 

Source Link

Document

Method for visiting type hierarchy for given type, using specified visitor.

Usage

From source file:com.phoenixnap.oss.ramlapisync.parser.SpringMvcResourceParser.java

@Override
protected Pair<String, RamlMimeType> extractRequestBody(Method method, Map<String, String> parameterComments,
        String comment, List<ApiParameterMetadata> apiParameters) {
    RamlMimeType mimeType = RamlModelFactoryOfFactories.createRamlModelFactory().createRamlMimeType();
    String type;/*from w  w w.j a  va2  s  .c o m*/
    //Handle empty body
    if (apiParameters != null && apiParameters.size() == 0) {
        // do nothing here
        return null;
    } else if (apiParameters != null && apiParameters.size() == 1
            && String.class.equals(apiParameters.get(0).getType())
            // Handle Plain Text parameters
            && apiParameters.get(0).isAnnotationPresent(RequestBody.class)) {
        ApiParameterMetadata apiParameterMetadata = apiParameters.get(0);
        type = "text/plain";
        if (StringUtils.hasText(apiParameterMetadata.getExample())) {
            mimeType.setExample(apiParameterMetadata.getExample());
        }
        ObjectMapper m = new ObjectMapper();
        SchemaFactoryWrapper visitor = new SchemaFactoryWrapper();
        try {
            m.acceptJsonFormatVisitor(m.constructType(String.class), visitor);
            JsonSchema jsonSchema = visitor.finalSchema();
            String description = parameterComments.get(apiParameterMetadata.getJavaName());
            if (description == null) {
                description = apiParameterMetadata.getName();
            }
            jsonSchema.setDescription(description);
            jsonSchema.setRequired(!apiParameterMetadata.isNullable());
            mimeType.setSchema(m.writerWithDefaultPrettyPrinter().writeValueAsString(jsonSchema));
        } catch (JsonProcessingException e) {
            throw new IllegalStateException(e);
        }
        return new Pair<>(type, mimeType);
    } else if (apiParameters != null
            && (apiParameters.size() > 1 || (!apiParameters.get(0).isAnnotationPresent(RequestBody.class)
                    && String.class.equals(apiParameters.get(0).getType())))) {
        type = "application/x-www-form-urlencoded";
        for (ApiParameterMetadata param : apiParameters) {
            RamlFormParameter formParameter = RamlModelFactoryOfFactories.createRamlModelFactory()
                    .createRamlFormParameter();
            formParameter.setDisplayName(param.getName());
            formParameter.setExample(param.getExample());
            RamlParamType simpleType = SchemaHelper.mapSimpleType(param.getType());
            formParameter.setType(simpleType == null ? RamlParamType.STRING : simpleType);
            String description = parameterComments.get(param.getJavaName());
            if (description == null) {
                description = param.getName();
            }
            formParameter.setDescription(description);
            formParameter.setRequired(!param.isNullable());
            Map<String, List<RamlFormParameter>> paramMap;
            if (mimeType.getFormParameters() == null) {
                paramMap = new TreeMap<>();
                mimeType.setFormParameters(paramMap);
            } else {
                paramMap = mimeType.getFormParameters();
            }
            mimeType.addFormParameters(param.getName(), Collections.singletonList(formParameter));
        }
        return new Pair<>(type, mimeType);
    } else {

        return super.extractRequestBody(method, parameterComments, comment, apiParameters);
    }
}

From source file:org.versly.rest.wsdoc.AnnotationProcessor.java

String jsonSchemaFromTypeMirror(TypeMirror type) {
    String serializedSchema = null;

    if (type.getKind().isPrimitive() || type.getKind() == TypeKind.VOID) {
        return null;
    }//ww w.j a  v a  2s  . c o  m

    // we need the dto class to generate schema using jackson json-schema module
    // note: Types.erasure() provides canonical names whereas Class.forName() wants a "regular" name,
    // so forName will fail for nested and inner classes as "regular" names use $ between parent and child.
    Class dtoClass = null;
    StringBuffer erasure = new StringBuffer(_typeUtils.erasure(type).toString());
    for (boolean done = false; !done;) {
        try {
            dtoClass = Class.forName(erasure.toString());
            done = true;
        } catch (ClassNotFoundException e) {
            if (erasure.lastIndexOf(".") != -1) {
                erasure.setCharAt(erasure.lastIndexOf("."), '$');
            } else {
                done = true;
            }
        }
    }

    // if we were able to figure out the dto class, use jackson json-schema module to serialize it
    Exception e = null;
    if (dtoClass != null) {
        try {
            ObjectMapper m = new ObjectMapper();
            m.enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING);
            m.registerModule(new JodaModule());
            SchemaFactoryWrapper visitor = new SchemaFactoryWrapper();
            m.acceptJsonFormatVisitor(m.constructType(dtoClass), visitor);
            serializedSchema = m.writeValueAsString(visitor.finalSchema());
        } catch (Exception ex) {
            e = ex;
        }
    }

    // report warning if we were not able to generate schema for non-primitive type
    if (serializedSchema == null) {
        this.processingEnv.getMessager().printMessage(Diagnostic.Kind.WARNING,
                "cannot generate json-schema for class " + type.toString() + " (erasure " + erasure + "), "
                        + ((e != null) ? ("exception: " + e.getMessage()) : "class not found"));
    }

    return serializedSchema;
}