/** * Provide a method to validate swagger. This method is now implemented to check common errors, and the logic * will be changed when necessary. For internal use only. */ public static void validateSwagger(Swagger swagger) { Map<String, Path> paths = swagger.getPaths(); if(paths != null) { for (Path path : paths.values()) { Operation operation = path.getPost(); if (operation != null) { List<Parameter> parameters = operation.getParameters(); for (Parameter parameter : parameters) { if (BodyParameter.class.isInstance(parameter)) { if (((BodyParameter) parameter).getSchema() == null) { throw new ServiceCombException("swagger validator: body parameter schema is empty."); } } } } } } }
/** Creates a map between http verb and operation. */ private Map<String, Operation> getOperationsForPath(Path pathObj) { Map<String, Operation> hmap = Maps.newLinkedHashMap(); hmap.put("get", pathObj.getGet()); hmap.put("head", pathObj.getHead()); hmap.put("delete", pathObj.getDelete()); hmap.put("patch", pathObj.getPatch()); hmap.put("post", pathObj.getPost()); hmap.put("put", pathObj.getPut()); hmap.put("options", pathObj.getOptions()); return hmap; } /** Adds a {@link Method} from {@link Operation}. */
/** Creates a map between http verb and operation. */ private Map<String, Operation> getOperationsForPath(Path pathObj) { Map<String, Operation> hmap = Maps.newLinkedHashMap(); hmap.put("get", pathObj.getGet()); hmap.put("head", pathObj.getHead()); hmap.put("delete", pathObj.getDelete()); hmap.put("patch", pathObj.getPatch()); hmap.put("post", pathObj.getPost()); hmap.put("put", pathObj.getPut()); hmap.put("options", pathObj.getOptions()); return hmap; } /** Adds a {@link Method} from {@link Operation}. */
private Operation getPostOperation() { return swaggerRouter.getSwagger().getPath(routeConfiguration.getSwaggerPath()).getPost(); }
public void addListModels(Swagger swagger) { Map<String, Model> listModels = new LinkedHashMap<>(); // lists in paths for (Path path : swagger.getPaths().values()) { List<Property> properties = new ArrayList<>(); properties.add(getArrayPropertyFromOperation(path.getGet())); properties.add(getArrayPropertyFromOperation(path.getPost())); properties.add(getArrayPropertyFromOperation(path.getPatch())); properties.add(getArrayPropertyFromOperation(path.getPut())); listModels.putAll(processListsFromProperties(properties, null, swagger)); } swagger.getDefinitions() .entrySet().stream() .filter(entry -> topLevelResources.contains(entry.getKey())) .forEach(entry -> { Model model = entry.getValue(); if (model != null && model.getProperties() != null) { listModels.putAll(processListsFromProperties(model.getProperties().values(), model, swagger)); } }); listModels.forEach(swagger::addDefinition); }
private Stream<OpenApiOperation> createMethodAndPath(String url, Path path) { List<OpenApiOperation> result = new ArrayList<>(); String fullUrl = combineWithBasePath(url); if (path.getGet() != null) { result.add(new OpenApiOperation("GET", fullUrl)); } if (path.getPut() != null) { result.add(new OpenApiOperation("PUT", fullUrl)); } if (path.getPost() != null) { result.add(new OpenApiOperation("POST", fullUrl)); } if (path.getDelete() != null) { result.add(new OpenApiOperation("DELETE", fullUrl)); } return result.stream(); }
/** * Provide a method to validate swagger. This method is now implemented to check common errors, and the logic * will be changed when necessary. For internal use only. */ public static void validateSwagger(Swagger swagger) { Map<String, Path> paths = swagger.getPaths(); for (Path path : paths.values()) { Operation operation = path.getPost(); if (operation != null) { List<Parameter> parameters = operation.getParameters(); for (Parameter parameter : parameters) { if (BodyParameter.class.isInstance(parameter)) { if (((BodyParameter) parameter).getSchema() == null) { throw new ServiceCombException("swagger validator: body parameter schema is empty."); } } } } } }
public static Map<HttpMethod, Operation> getOperationMap(Path operations) { Map<HttpMethod, Operation> result = new LinkedHashMap<HttpMethod, Operation>(); if (operations.getGet() != null) { result.put(HttpMethod.GET, operations.getGet()); } if (operations.getPut() != null) { result.put(HttpMethod.PUT, operations.getPut()); } if (operations.getPost() != null) { result.put(HttpMethod.POST, operations.getPost()); } if (operations.getDelete() != null) { result.put(HttpMethod.DELETE, operations.getDelete()); } if (operations.getPatch() != null) { result.put(HttpMethod.PATCH, operations.getPatch()); } if (operations.getHead() != null) { result.put(HttpMethod.HEAD, operations.getHead()); } if (operations.getOptions() != null) { result.put(HttpMethod.OPTIONS, operations.getOptions()); } return result; }
/** * Decorates with responses that apply to all operations for all paths. * @param path the path to decorate * @return the decorated path */ private Path decorateGlobalResponses(Path path) { globalResponses.forEach( (code, response) -> { if (path.getGet() != null) { path.getGet().response(code, response); } if (path.getDelete() != null) { path.getDelete().response(code, response); } if (path.getPost() != null) { path.getPost().response(code, response); } if (path.getPatch() != null) { path.getPatch().response(code, response); } } ); return path; }
/** * * @param basePath * @param path * @param pathObject */ private void processSwaggerPath(String basePath, String path, io.swagger.models.Path pathObject) { String URI = new StringBuilder().append(StringUtils.isNotEmpty(basePath) ? basePath : "").append(path) .toString(); populateSwaggerMap(URI, "GET", pathObject.getGet()); populateSwaggerMap(URI, "POST", pathObject.getPost()); populateSwaggerMap(URI, "DELETE", pathObject.getDelete()); populateSwaggerMap(URI, "PATCH", pathObject.getPatch()); populateSwaggerMap(URI, "PUT", pathObject.getPut()); populateSwaggerMap(URI, "HEAD", pathObject.getHead()); populateSwaggerMap(URI, "OPTIONS", pathObject.getOptions()); }
@Override public Iterable<Endpoint> listEndpoints() { List<Endpoint> endpoints = new ArrayList<>(); String basePath = findBasePath(); Map<String, Path> paths = SwaggerHelper.swagger.getPaths(); if(log.isInfoEnabled()) log.info("Generating paths from Swagger spec"); for (Map.Entry<String, Path> pathPair : paths.entrySet()) { String path = basePath + pathPair.getKey(); Path pathImpl = pathPair.getValue(); if(pathImpl.getGet() != null) addEndpoint(endpoints, path, "get"); if(pathImpl.getPut() != null) addEndpoint(endpoints, path, "put"); if(pathImpl.getHead() != null) addEndpoint(endpoints, path, "head"); if(pathImpl.getPost() != null) addEndpoint(endpoints, path, "post"); if(pathImpl.getDelete() != null) addEndpoint(endpoints, path, "delete"); if(pathImpl.getPatch() != null) addEndpoint(endpoints, path, "patch"); if(pathImpl.getOptions() != null) addEndpoint(endpoints, path, "options"); } return endpoints; }
@Override public void afterScan(final io.swagger.jaxrs.Reader reader, final Swagger swagger) { for (final String pathName : swagger.getPaths().keySet()) { final Path path = swagger.getPaths().get(pathName); decorateOperation(path.getGet(), pathName, "GET"); decorateOperation(path.getPost(), pathName, "POST"); decorateOperation(path.getPut(), pathName, "PUT"); decorateOperation(path.getDelete(), pathName, "DELETE"); decorateOperation(path.getOptions(), pathName, "OPTIONS"); } for (final Model m : swagger.getDefinitions().values()) { if (m.getProperties() != null) { for (final Property p : m.getProperties().values()) { p.setReadOnly(false); } } } }
private Map<String, Operation> getOperations(Path path) { final Map<String, Operation> ops = new HashMap<>(); addOp(ops, "get", path.getGet()); addOp(ops, "post", path.getPost()); addOp(ops, "put", path.getPut()); addOp(ops, "delete", path.getDelete()); addOp(ops, "options", path.getOptions()); addOp(ops, "patch", path.getPatch()); return ops; }
private void validatePath(String pathName, Path actualPath, Path expectedPath) { if (expectedPath != null) { softAssertions.assertThat(actualPath.getOperations().size()).as("Checking number of operations of path '%s'", pathName).isGreaterThanOrEqualTo(expectedPath.getOperations().size()); validateOperation(actualPath.getGet(), expectedPath.getGet(), pathName, "GET"); validateOperation(actualPath.getDelete(), expectedPath.getDelete(), pathName, "DELETE"); validateOperation(actualPath.getPost(), expectedPath.getPost(), pathName, "POST"); validateOperation(actualPath.getPut(), expectedPath.getPut(), pathName, "PUT"); validateOperation(actualPath.getPatch(), expectedPath.getPatch(), pathName, "PATCH"); validateOperation(actualPath.getOptions(), expectedPath.getOptions(), pathName, "OPTIONS"); } }
private List<Operation> getAllOperationsInAPath(Path pathObj) { List<Operation> operations = new ArrayList<>(); addToOperationsList(operations, pathObj.getGet()); addToOperationsList(operations, pathObj.getPut()); addToOperationsList(operations, pathObj.getPost()); addToOperationsList(operations, pathObj.getPatch()); addToOperationsList(operations, pathObj.getDelete()); addToOperationsList(operations, pathObj.getOptions()); addToOperationsList(operations, pathObj.getHead()); return operations; }
private void validatePath(String pathName, Path actualPath, Path expectedPath) { if (expectedPath != null) { softAssertions.assertThat(actualPath.getOperations()).as("Checking number of operations of path '%s'", pathName).hasSameSizeAs(actualPath.getOperations()); validateOperation(actualPath.getGet(), expectedPath.getGet(), pathName, "GET"); validateOperation(actualPath.getDelete(), expectedPath.getDelete(), pathName, "DELETE"); validateOperation(actualPath.getPost(), expectedPath.getPost(), pathName, "POST"); validateOperation(actualPath.getPut(), expectedPath.getPut(), pathName, "PUT"); validateOperation(actualPath.getPatch(), expectedPath.getPatch(), pathName, "PATCH"); validateOperation(actualPath.getOptions(), expectedPath.getOptions(), pathName, "OPTIONS"); } }
private Path path2Instance(ServiceDocument doc) { Path path = new Path(); path.setParameters(Collections.singletonList(paramId())); path.setGet(opDefault(doc)); if (doc.documentDescription != null && doc.documentDescription.serviceRequestRoutes != null && !doc.documentDescription.serviceRequestRoutes.isEmpty()) { Path pathByRoutes = pathByRoutes(doc.documentDescription.serviceRequestRoutes.values()); path.setPost(pathByRoutes.getPost()); path.setPut(pathByRoutes.getPut()); path.setPatch(pathByRoutes.getPatch()); } else { io.swagger.models.Operation op = new io.swagger.models.Operation(); op.addTag(this.currentTag.getName()); op.setParameters(Collections.singletonList(paramBody(ServiceDocument.class))); op.setResponses(responseMap( Operation.STATUS_CODE_OK, responseOk(doc), Operation.STATUS_CODE_NOT_FOUND, responseGenericError() )); // service definition should be introspected to better // describe which actions are supported path.setPost(op); path.setPut(op); path.setPatch(op); } return path; }
private Path getNewWildCardPathObject(Path userDefinedWildCardPathObject) { Preconditions.checkNotNull( userDefinedWildCardPathObject, "userDefinedWildCardPathObject cannot be null"); Path path = new Path(); if (userDefinedWildCardPathObject.getGet() == null) { path.set("get", constructReservedOperation("Get")); } if (userDefinedWildCardPathObject.getDelete() == null) { path.set("delete", constructReservedOperation("Delete")); } if (userDefinedWildCardPathObject.getPatch() == null) { path.set("patch", constructReservedOperation("Patch")); } if (userDefinedWildCardPathObject.getPost() == null) { path.set("post", constructReservedOperation("Post")); } if (userDefinedWildCardPathObject.getPut() == null) { path.set("put", constructReservedOperation("Put")); } return path; }
private Path getNewWildCardPathObject(Path userDefinedWildCardPathObject) { Preconditions.checkNotNull( userDefinedWildCardPathObject, "userDefinedWildCardPathObject cannot be null"); Path path = new Path(); if (userDefinedWildCardPathObject.getGet() == null) { path.set("get", constructReservedOperation("Get")); } if (userDefinedWildCardPathObject.getDelete() == null) { path.set("delete", constructReservedOperation("Delete")); } if (userDefinedWildCardPathObject.getPatch() == null) { path.set("patch", constructReservedOperation("Patch")); } if (userDefinedWildCardPathObject.getPost() == null) { path.set("post", constructReservedOperation("Post")); } if (userDefinedWildCardPathObject.getPut() == null) { path.set("put", constructReservedOperation("Put")); } return path; }