Search in sources :

Example 1 with Model

use of io.swagger.models.Model in project java-chassis by ServiceComb.

the class AnnotationUtils method generateResponseProperty.

public static Property generateResponseProperty(Swagger swagger, ResponseConfigBase config) throws Error {
    Class<?> responseClass = config.getResponseClass();
    if (responseClass == null || ReflectionUtils.isVoid(responseClass)) {
        return null;
    }
    if (!ClassUtils.isPrimitiveOrWrapper(responseClass)) {
        Map<String, Model> newDefinitions = ModelConverters.getInstance().readAll(responseClass);
        appendDefinition(swagger, newDefinitions);
    }
    Property property = ModelConverters.getInstance().readAsProperty(responseClass);
    // 根据swagger定义这里是区分大小写的, 虽然不明白为何这样做,不过还是不要改标准了
    switch(config.getResponseContainer()) {
        case "List":
            property = new ArrayProperty(property);
            break;
        case "Set":
            property = new ArrayProperty(property);
            ((ArrayProperty) property).setUniqueItems(true);
            break;
        case "Map":
            property = new MapProperty(property);
            break;
        case "":
            // 不必处理
            break;
        default:
            throw new Error("not support responseContainer " + config.getResponseContainer());
    }
    return property;
}
Also used : ArrayProperty(io.swagger.models.properties.ArrayProperty) MapProperty(io.swagger.models.properties.MapProperty) Model(io.swagger.models.Model) ArrayProperty(io.swagger.models.properties.ArrayProperty) Property(io.swagger.models.properties.Property) MapProperty(io.swagger.models.properties.MapProperty)

Example 2 with Model

use of io.swagger.models.Model in project java-chassis by ServiceComb.

the class TestSwaggerUtils method testConverter.

@Test
public void testConverter() {
    SwaggerGenerator generator = new SwaggerGeneratorForTest(context, null);
    Swagger swagger = generator.getSwagger();
    ParamUtils.addDefinitions(swagger, User.class);
    Model model = swagger.getDefinitions().get("User");
    model.getVendorExtensions().clear();
    JavaType javaType = ConverterMgr.findJavaType(generator, model);
    checkJavaType(swagger, javaType);
    RefModel refModel = new RefModel();
    refModel.setReference("User");
    javaType = ConverterMgr.findJavaType(generator, refModel);
    checkJavaType(swagger, javaType);
}
Also used : JavaType(com.fasterxml.jackson.databind.JavaType) RefModel(io.swagger.models.RefModel) Swagger(io.swagger.models.Swagger) RefModel(io.swagger.models.RefModel) Model(io.swagger.models.Model) SwaggerGeneratorForTest(io.servicecomb.swagger.generator.core.unittest.SwaggerGeneratorForTest) Test(org.junit.Test) SwaggerGeneratorForTest(io.servicecomb.swagger.generator.core.unittest.SwaggerGeneratorForTest)

Example 3 with Model

use of io.swagger.models.Model in project java-chassis by ServiceComb.

the class ArgumentsMapperFactory method processBodyFieldArgMapper.

// 将多个provider参数映射为契约body的field
// value为field在provider参数中的下标
protected void processBodyFieldArgMapper(ArgumentsMapperConfig config, int swaggerIdx) {
    Class<?>[] swaggerParameterTypes = config.getSwaggerMethod().getParameterTypes();
    Class<?> swaggerParameterType = swaggerParameterTypes[swaggerIdx];
    BodyParameter bp = (BodyParameter) config.getSwaggerParameters().get(swaggerIdx);
    Model model = bp.getSchema();
    if (RefModel.class.isInstance(model)) {
        String refName = ((RefModel) model).getSimpleRef();
        model = config.getSwagger().getDefinitions().get(refName);
    }
    Map<Integer, Field> fieldMap = new HashMap<>();
    for (String propertyName : model.getProperties().keySet()) {
        // 理论上应该只在provider的body类型的参数中查找,不过正常定义契约不会有问题的,先不用处理了
        int providerIdx = findInParameters(propertyName, config.getProviderParameters());
        if (providerIdx >= 0) {
            Field field = ReflectionUtils.findField(swaggerParameterType, propertyName);
            field.setAccessible(true);
            fieldMap.put(providerIdx, field);
            continue;
        }
        String msg = generateSkipParamInfo("body parameter field", config, propertyName);
        LOGGER.warn(msg);
    }
    ArgumentMapper bodyFieldArg = createBodyFieldArgMapper(config, swaggerIdx, fieldMap);
    config.addArgumentMapper(bodyFieldArg);
}
Also used : RefModel(io.swagger.models.RefModel) HashMap(java.util.HashMap) BodyParameter(io.swagger.models.parameters.BodyParameter) Field(java.lang.reflect.Field) RefModel(io.swagger.models.RefModel) Model(io.swagger.models.Model)

Example 4 with Model

use of io.swagger.models.Model in project swagger-core by swagger-api.

the class SwaggerSerializerTest method convertSpec.

@Test(description = "it should convert a spec")
public void convertSpec() throws IOException {
    final Model personModel = ModelConverters.getInstance().read(Person.class).get("Person");
    final Model errorModel = ModelConverters.getInstance().read(Error.class).get("Error");
    final Info info = new Info().version("1.0.0").title("Swagger Petstore");
    final Contact contact = new Contact().name("Swagger API Team").email("foo@bar.baz").url("http://swagger.io");
    info.setContact(contact);
    final Map<String, Object> map = new HashMap<String, Object>();
    map.put("name", "value");
    info.setVendorExtension("x-test2", map);
    info.setVendorExtension("x-test", "value");
    final Swagger swagger = new Swagger().info(info).host("petstore.swagger.io").securityDefinition("api-key", new ApiKeyAuthDefinition("key", In.HEADER)).scheme(Scheme.HTTP).consumes("application/json").produces("application/json").model("Person", personModel).model("Error", errorModel);
    final Operation get = new Operation().produces("application/json").summary("finds pets in the system").description("a longer description").tag("Pet Operations").operationId("get pet by id").deprecated(true);
    get.parameter(new QueryParameter().name("tags").description("tags to filter by").required(false).property(new StringProperty()));
    get.parameter(new PathParameter().name("petId").description("pet to fetch").property(new LongProperty()));
    final Response response = new Response().description("pets returned").schema(new RefProperty().asDefault("Person")).example("application/json", "fun!");
    final Response errorResponse = new Response().description("error response").schema(new RefProperty().asDefault("Error"));
    get.response(200, response).defaultResponse(errorResponse);
    final Operation post = new Operation().summary("adds a new pet").description("you can add a new pet this way").tag("Pet Operations").operationId("add pet").defaultResponse(errorResponse).parameter(new BodyParameter().description("the pet to add").schema(new RefModel().asDefault("Person")));
    swagger.path("/pets", new Path().get(get).post(post));
    final String swaggerJson = Json.mapper().writeValueAsString(swagger);
    final Swagger rebuilt = Json.mapper().readValue(swaggerJson, Swagger.class);
    SerializationMatchers.assertEqualsToJson(rebuilt, swaggerJson);
}
Also used : Path(io.swagger.models.Path) QueryParameter(io.swagger.models.parameters.QueryParameter) RefModel(io.swagger.models.RefModel) HashMap(java.util.HashMap) Error(io.swagger.models.Error) StringProperty(io.swagger.models.properties.StringProperty) Operation(io.swagger.models.Operation) Info(io.swagger.models.Info) BodyParameter(io.swagger.models.parameters.BodyParameter) PathParameter(io.swagger.models.parameters.PathParameter) Contact(io.swagger.models.Contact) RefProperty(io.swagger.models.properties.RefProperty) Response(io.swagger.models.Response) ApiKeyAuthDefinition(io.swagger.models.auth.ApiKeyAuthDefinition) Swagger(io.swagger.models.Swagger) LongProperty(io.swagger.models.properties.LongProperty) Model(io.swagger.models.Model) RefModel(io.swagger.models.RefModel) Person(io.swagger.models.Person) Test(org.testng.annotations.Test)

Example 5 with Model

use of io.swagger.models.Model in project swagger-core by swagger-api.

the class SwaggerSerializerTest method writeSpecWithParameterReferences.

@Test(description = "it should write a spec with parameter references")
public void writeSpecWithParameterReferences() throws IOException {
    final Model personModel = ModelConverters.getInstance().read(Person.class).get("Person");
    final Info info = new Info().version("1.0.0").title("Swagger Petstore");
    final Contact contact = new Contact().name("Swagger API Team").email("foo@bar.baz").url("http://swagger.io");
    info.setContact(contact);
    final Swagger swagger = new Swagger().info(info).host("petstore.swagger.io").securityDefinition("api-key", new ApiKeyAuthDefinition("key", In.HEADER)).scheme(Scheme.HTTP).consumes("application/json").produces("application/json").model("Person", personModel);
    final QueryParameter parameter = new QueryParameter().name("id").description("a common get parameter").property(new LongProperty());
    final Operation get = new Operation().produces("application/json").summary("finds pets in the system").description("a longer description").tag("Pet Operations").operationId("get pet by id").parameter(new RefParameter("foo"));
    swagger.parameter("foo", parameter).path("/pets", new Path().get(get));
    final String swaggerJson = Json.mapper().writeValueAsString(swagger);
    final Swagger rebuilt = Json.mapper().readValue(swaggerJson, Swagger.class);
    assertEquals(Json.pretty(swagger), Json.pretty(rebuilt));
}
Also used : Path(io.swagger.models.Path) ApiKeyAuthDefinition(io.swagger.models.auth.ApiKeyAuthDefinition) QueryParameter(io.swagger.models.parameters.QueryParameter) RefParameter(io.swagger.models.parameters.RefParameter) Swagger(io.swagger.models.Swagger) LongProperty(io.swagger.models.properties.LongProperty) Model(io.swagger.models.Model) RefModel(io.swagger.models.RefModel) Operation(io.swagger.models.Operation) Info(io.swagger.models.Info) Person(io.swagger.models.Person) Contact(io.swagger.models.Contact) Test(org.testng.annotations.Test)

Aggregations

Model (io.swagger.models.Model)192 Test (org.testng.annotations.Test)111 Property (io.swagger.models.properties.Property)86 RefModel (io.swagger.models.RefModel)59 ArrayModel (io.swagger.models.ArrayModel)50 ArrayProperty (io.swagger.models.properties.ArrayProperty)46 ModelImpl (io.swagger.models.ModelImpl)43 RefProperty (io.swagger.models.properties.RefProperty)41 StringProperty (io.swagger.models.properties.StringProperty)41 Swagger (io.swagger.models.Swagger)38 BodyParameter (io.swagger.models.parameters.BodyParameter)33 Operation (io.swagger.models.Operation)31 ComposedModel (io.swagger.models.ComposedModel)26 Path (io.swagger.models.Path)23 MapProperty (io.swagger.models.properties.MapProperty)23 Test (org.junit.Test)22 ApiModelProperty (io.swagger.annotations.ApiModelProperty)21 Map (java.util.Map)21 ApiModel (io.swagger.annotations.ApiModel)18 IntegerProperty (io.swagger.models.properties.IntegerProperty)18