Search in sources :

Example 51 with Parameter

use of org.apache.cxf.jaxrs.model.Parameter in project cxf by apache.

the class SwaggerParseUtils method getUserApplicationFromJson.

public static UserApplication getUserApplicationFromJson(String json, ParseConfiguration cfg) {
    JsonMapObjectReaderWriter reader = new JsonMapObjectReaderWriter();
    Map<String, Object> map = reader.fromJson(json);
    UserApplication app = new UserApplication();
    String relativePath = (String) map.get("basePath");
    app.setBasePath(StringUtils.isEmpty(relativePath) ? "/" : relativePath);
    Map<String, List<UserOperation>> userOpsMap = new LinkedHashMap<>();
    Set<String> tags = new HashSet<>();
    List<Map<String, Object>> tagsProp = CastUtils.cast((List<?>) map.get("tags"));
    if (tagsProp != null) {
        for (Map<String, Object> tagProp : tagsProp) {
            tags.add((String) tagProp.get("name"));
        }
    } else {
        tags.add("");
    }
    for (String tag : tags) {
        userOpsMap.put(tag, new LinkedList<UserOperation>());
    }
    Map<String, Map<String, Object>> paths = CastUtils.cast((Map<?, ?>) map.get("paths"));
    for (Map.Entry<String, Map<String, Object>> pathEntry : paths.entrySet()) {
        String operPath = pathEntry.getKey();
        Map<String, Object> operations = pathEntry.getValue();
        for (Map.Entry<String, Object> operEntry : operations.entrySet()) {
            UserOperation userOp = new UserOperation();
            userOp.setVerb(operEntry.getKey().toUpperCase());
            Map<String, Object> oper = CastUtils.cast((Map<?, ?>) operEntry.getValue());
            // operations but Swagger may still include it.
            if (oper != null) {
                userOp.setPath(operPath);
                userOp.setName((String) oper.get("operationId"));
                List<String> opProduces = CastUtils.cast((List<?>) oper.get("produces"));
                userOp.setProduces(listToString(opProduces));
                List<String> opConsumes = CastUtils.cast((List<?>) oper.get("consumes"));
                userOp.setConsumes(listToString(opConsumes));
                List<Parameter> userOpParams = new LinkedList<>();
                List<Map<String, Object>> params = CastUtils.cast((List<?>) oper.get("parameters"));
                for (Map<String, Object> param : params) {
                    String name = (String) param.get("name");
                    // "query", "header", "path", "formData" or "body"
                    String paramType = (String) param.get("in");
                    ParameterType pType = "body".equals(paramType) ? ParameterType.REQUEST_BODY : "formData".equals(paramType) ? ParameterType.FORM : ParameterType.valueOf(paramType.toUpperCase());
                    Parameter userParam = new Parameter(pType, name);
                    setJavaType(userParam, (String) param.get("type"));
                    userOpParams.add(userParam);
                }
                if (!userOpParams.isEmpty()) {
                    userOp.setParameters(userOpParams);
                }
                List<String> opTags = CastUtils.cast((List<?>) oper.get("tags"));
                if (opTags == null) {
                    opTags = Collections.singletonList("");
                }
                for (String opTag : opTags) {
                    userOpsMap.get(opTag).add(userOp);
                }
            }
        }
    }
    List<UserResource> resources = new LinkedList<>();
    for (Map.Entry<String, List<UserOperation>> entry : userOpsMap.entrySet()) {
        UserResource ur = new UserResource();
        ur.setPath("/");
        ur.setOperations(entry.getValue());
        ur.setName(entry.getKey());
        resources.add(ur);
    }
    app.setResources(resources);
    return app;
}
Also used : LinkedHashMap(java.util.LinkedHashMap) LinkedList(java.util.LinkedList) List(java.util.List) HashSet(java.util.HashSet) ParameterType(org.apache.cxf.jaxrs.model.ParameterType) JsonMapObjectReaderWriter(org.apache.cxf.jaxrs.json.basic.JsonMapObjectReaderWriter) UserResource(org.apache.cxf.jaxrs.model.UserResource) LinkedList(java.util.LinkedList) UserApplication(org.apache.cxf.jaxrs.model.UserApplication) UserOperation(org.apache.cxf.jaxrs.model.UserOperation) Parameter(org.apache.cxf.jaxrs.model.Parameter) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map)

Example 52 with Parameter

use of org.apache.cxf.jaxrs.model.Parameter in project cxf by apache.

the class OpenApiParseUtils method getUserApplicationFromJson.

public static UserApplication getUserApplicationFromJson(String json, ParseConfiguration cfg) {
    JsonMapObjectReaderWriter reader = new JsonMapObjectReaderWriter();
    Map<String, Object> map = reader.fromJson(json);
    UserApplication app = new UserApplication();
    app.setBasePath("/");
    List<Map<String, Object>> servers = CastUtils.cast((List<?>) map.get("servers"));
    if (servers != null && !servers.isEmpty()) {
        final String url = (String) servers.get(0).get("url");
        if (url != null) {
            app.setBasePath(url);
        }
    }
    Map<String, List<UserOperation>> userOpsMap = new LinkedHashMap<>();
    Set<String> tags = new HashSet<>();
    List<Map<String, Object>> tagsProp = CastUtils.cast((List<?>) map.get("tags"));
    if (tagsProp != null) {
        for (Map<String, Object> tagProp : tagsProp) {
            tags.add((String) tagProp.get("name"));
        }
    } else {
        tags.add("");
    }
    for (String tag : tags) {
        userOpsMap.put(tag, new LinkedList<UserOperation>());
    }
    Map<String, Map<String, Object>> paths = CastUtils.cast((Map<?, ?>) map.get("paths"));
    for (Map.Entry<String, Map<String, Object>> pathEntry : paths.entrySet()) {
        String operPath = pathEntry.getKey();
        Map<String, Object> operations = pathEntry.getValue();
        for (Map.Entry<String, Object> operEntry : operations.entrySet()) {
            UserOperation userOp = new UserOperation();
            userOp.setVerb(operEntry.getKey().toUpperCase());
            Map<String, Object> oper = CastUtils.cast((Map<?, ?>) operEntry.getValue());
            userOp.setPath(operPath);
            userOp.setName((String) oper.get("operationId"));
            Map<String, Object> responses = CastUtils.cast((Map<?, ?>) oper.get("responses"));
            if (responses != null) {
                userOp.setProduces(listToString(responses.entrySet().stream().map(entry -> CastUtils.cast((Map<?, ?>) entry.getValue())).map(value -> CastUtils.cast((Map<?, ?>) value.get("content"))).filter(Objects::nonNull).flatMap(content -> content.keySet().stream().map(type -> (String) type)).collect(Collectors.toList())));
            }
            Map<String, Object> payloads = CastUtils.cast((Map<?, ?>) oper.get("requestBody"));
            if (payloads != null) {
                userOp.setConsumes(listToString(payloads.entrySet().stream().map(entry -> CastUtils.cast((Map<?, ?>) entry.getValue())).map(value -> CastUtils.cast((Map<?, ?>) value.get("content"))).filter(Objects::nonNull).flatMap(content -> content.keySet().stream().map(type -> (String) type)).collect(Collectors.toList())));
            }
            List<Parameter> userOpParams = new LinkedList<>();
            List<Map<String, Object>> params = CastUtils.cast((List<?>) oper.get("parameters"));
            if (params != null) {
                for (Map<String, Object> param : params) {
                    String name = (String) param.get("name");
                    // "query", "header", "path" or "cookie".
                    String paramType = (String) param.get("in");
                    final ParameterType pType;
                    if ("query".equals(paramType)) {
                        pType = ParameterType.QUERY;
                    } else if ("header".equals(paramType)) {
                        pType = ParameterType.HEADER;
                    } else if ("path".equals(paramType)) {
                        pType = ParameterType.PATH;
                    } else if ("cookie".equals(paramType)) {
                        pType = ParameterType.COOKIE;
                    } else {
                        pType = ParameterType.REQUEST_BODY;
                    }
                    Parameter userParam = new Parameter(pType, name);
                    setJavaType(userParam, (String) param.get("type"));
                    userOpParams.add(userParam);
                }
            }
            if (!userOpParams.isEmpty()) {
                userOp.setParameters(userOpParams);
            }
            List<String> opTags = CastUtils.cast((List<?>) oper.get("tags"));
            if (opTags == null) {
                opTags = Collections.singletonList("");
            }
            for (String opTag : opTags) {
                userOpsMap.putIfAbsent(opTag, new LinkedList<UserOperation>());
                userOpsMap.get(opTag).add(userOp);
            }
        }
    }
    List<UserResource> resources = new LinkedList<>();
    for (Map.Entry<String, List<UserOperation>> entry : userOpsMap.entrySet()) {
        if (!entry.getValue().isEmpty()) {
            UserResource ur = new UserResource();
            ur.setPath("/");
            ur.setOperations(entry.getValue());
            ur.setName(entry.getKey());
            resources.add(ur);
        }
    }
    app.setResources(resources);
    return app;
}
Also used : Bus(org.apache.cxf.Bus) UserApplication(org.apache.cxf.jaxrs.model.UserApplication) HashMap(java.util.HashMap) UserResource(org.apache.cxf.jaxrs.model.UserResource) Parameter(org.apache.cxf.jaxrs.model.Parameter) HashSet(java.util.HashSet) LinkedHashMap(java.util.LinkedHashMap) ParameterType(org.apache.cxf.jaxrs.model.ParameterType) LogUtils(org.apache.cxf.common.logging.LogUtils) Map(java.util.Map) ResourceUtils(org.apache.cxf.jaxrs.utils.ResourceUtils) LinkedList(java.util.LinkedList) UserOperation(org.apache.cxf.jaxrs.model.UserOperation) CastUtils(org.apache.cxf.helpers.CastUtils) IOUtils(org.apache.cxf.helpers.IOUtils) Set(java.util.Set) IOException(java.io.IOException) Logger(java.util.logging.Logger) ClassLoaderUtils(org.apache.cxf.common.classloader.ClassLoaderUtils) Collectors(java.util.stream.Collectors) Objects(java.util.Objects) List(java.util.List) BusFactory(org.apache.cxf.BusFactory) Collections(java.util.Collections) InputStream(java.io.InputStream) JsonMapObjectReaderWriter(org.apache.cxf.jaxrs.json.basic.JsonMapObjectReaderWriter) LinkedHashMap(java.util.LinkedHashMap) LinkedList(java.util.LinkedList) List(java.util.List) HashSet(java.util.HashSet) ParameterType(org.apache.cxf.jaxrs.model.ParameterType) JsonMapObjectReaderWriter(org.apache.cxf.jaxrs.json.basic.JsonMapObjectReaderWriter) UserResource(org.apache.cxf.jaxrs.model.UserResource) LinkedList(java.util.LinkedList) UserApplication(org.apache.cxf.jaxrs.model.UserApplication) UserOperation(org.apache.cxf.jaxrs.model.UserOperation) Objects(java.util.Objects) Parameter(org.apache.cxf.jaxrs.model.Parameter) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map)

Example 53 with Parameter

use of org.apache.cxf.jaxrs.model.Parameter in project cxf by apache.

the class MicroProfileClientProxyImpl method createClientHeaderParameter.

private Parameter createClientHeaderParameter(ClientHeaderParam anno, Class<?> clientIntf) {
    Parameter p = new Parameter(ParameterType.HEADER, anno.name());
    String[] values = anno.value();
    String headerValue;
    if (values[0] != null && values[0].length() > 2 && values[0].startsWith("{") && values[0].endsWith("}")) {
        try {
            headerValue = invokeBestFitComputeMethod(clientIntf, anno);
        } catch (Throwable t) {
            if (anno.required()) {
                throwException(t);
            }
            return null;
        }
    } else {
        headerValue = HttpUtils.getHeaderString(Arrays.asList(values));
    }
    p.setDefaultValue(headerValue);
    return p;
}
Also used : Parameter(org.apache.cxf.jaxrs.model.Parameter)

Example 54 with Parameter

use of org.apache.cxf.jaxrs.model.Parameter in project cxf by apache.

the class AbstractSwagger2ServiceDescriptionTest method doTestApiListingIsProperlyReturnedJSON.

protected static void doTestApiListingIsProperlyReturnedJSON(final WebClient client, XForwarded useXForwarded) throws Exception {
    if (useXForwarded == XForwarded.ONE_HOST) {
        client.header("USE_XFORWARDED", true);
    } else if (useXForwarded == XForwarded.MANY_HOSTS) {
        client.header("USE_XFORWARDED_MANY_HOSTS", true);
    }
    try {
        String swaggerJson = client.get(String.class);
        UserApplication ap = SwaggerParseUtils.getUserApplicationFromJson(swaggerJson);
        assertNotNull(ap);
        assertEquals(useXForwarded.isSet() ? "/reverse" : "/", ap.getBasePath());
        List<UserResource> urs = ap.getResources();
        assertNotNull(urs);
        assertEquals(1, urs.size());
        UserResource r = urs.get(0);
        String basePath = "";
        if (!"/".equals(r.getPath())) {
            basePath = r.getPath();
        }
        Map<String, UserOperation> map = r.getOperationsAsMap();
        assertEquals(3, map.size());
        UserOperation getBooksOp = map.get("getBooks");
        assertEquals(HttpMethod.GET, getBooksOp.getVerb());
        assertEquals("/bookstore", basePath + getBooksOp.getPath());
        assertEquals(MediaType.APPLICATION_JSON, getBooksOp.getProduces());
        List<Parameter> getBooksOpParams = getBooksOp.getParameters();
        assertEquals(1, getBooksOpParams.size());
        assertEquals(ParameterType.QUERY, getBooksOpParams.get(0).getType());
        UserOperation getBookOp = map.get("getBook");
        assertEquals(HttpMethod.GET, getBookOp.getVerb());
        assertEquals("/bookstore/{id}", basePath + getBookOp.getPath());
        assertEquals(MediaType.APPLICATION_JSON, getBookOp.getProduces());
        List<Parameter> getBookOpParams = getBookOp.getParameters();
        assertEquals(1, getBookOpParams.size());
        assertEquals(ParameterType.PATH, getBookOpParams.get(0).getType());
        UserOperation deleteOp = map.get("delete");
        assertEquals(HttpMethod.DELETE, deleteOp.getVerb());
        assertEquals("/bookstore/{id}", basePath + deleteOp.getPath());
        List<Parameter> delOpParams = deleteOp.getParameters();
        assertEquals(1, delOpParams.size());
        assertEquals(ParameterType.PATH, delOpParams.get(0).getType());
        assertThat(swaggerJson, CoreMatchers.containsString(CONTACT));
        assertThat(swaggerJson, CoreMatchers.containsString(TITLE));
        assertThat(swaggerJson, CoreMatchers.containsString(DESCRIPTION));
        assertThat(swaggerJson, CoreMatchers.containsString(LICENSE));
        assertThat(swaggerJson, CoreMatchers.containsString(LICENSE_URL));
        assertThat(swaggerJson, CoreMatchers.containsString(SECURITY_DEFINITION_NAME));
    } finally {
        client.close();
    }
}
Also used : UserApplication(org.apache.cxf.jaxrs.model.UserApplication) UserOperation(org.apache.cxf.jaxrs.model.UserOperation) UserResource(org.apache.cxf.jaxrs.model.UserResource) Parameter(org.apache.cxf.jaxrs.model.Parameter) CoreMatchers.containsString(org.hamcrest.CoreMatchers.containsString)

Aggregations

Parameter (org.apache.cxf.jaxrs.model.Parameter)54 Method (java.lang.reflect.Method)16 UserOperation (org.apache.cxf.jaxrs.model.UserOperation)15 Endpoint (org.apache.cxf.endpoint.Endpoint)13 ParameterType (org.apache.cxf.jaxrs.model.ParameterType)13 ArrayList (java.util.ArrayList)11 LinkedHashMap (java.util.LinkedHashMap)10 UserResource (org.apache.cxf.jaxrs.model.UserResource)10 HashMap (java.util.HashMap)8 MultivaluedMap (javax.ws.rs.core.MultivaluedMap)8 UserApplication (org.apache.cxf.jaxrs.model.UserApplication)8 MediaType (javax.ws.rs.core.MediaType)7 MetadataMap (org.apache.cxf.jaxrs.impl.MetadataMap)7 ClassResourceInfo (org.apache.cxf.jaxrs.model.ClassResourceInfo)7 OperationResourceInfo (org.apache.cxf.jaxrs.model.OperationResourceInfo)7 Type (java.lang.reflect.Type)6 Annotation (java.lang.annotation.Annotation)5 Map (java.util.Map)5 Context (javax.ws.rs.core.Context)5 Field (java.lang.reflect.Field)4