@Override public void process(Object annotation, SwaggerGenerator swaggerGenerator) { // swagger号称不允许独立使用这个标注,不过支持独立使用,也没什么后果 ApiResponse apiResponse = (ApiResponse) annotation; AnnotationUtils.addResponse(swaggerGenerator.getSwagger(), apiResponse); } }
protected void processPath(String[] paths, SwaggerGenerator swaggerGenerator) { if (null == paths || paths.length == 0) { return; } // swagger仅支持配一个basePath if (paths.length > 1) { throw new Error("not support multi path for " + swaggerGenerator.getCls().getName()); } swaggerGenerator.setBasePath(paths[0]); }
public static SwaggerGenerator generateSwagger(ClassLoader classLoader, Class<?> cls) { SwaggerGeneratorContext context = compositeContext.selectContext(cls); SwaggerGenerator generator = new SwaggerGenerator(context, cls); generator.setClassLoader(classLoader); generator.generate(); return generator; }
protected void processMethod(RequestMethod[] requestMethods, SwaggerGenerator swaggerGenerator) { if (null == requestMethods || requestMethods.length == 0) { return; } if (requestMethods.length > 1) { throw new Error( "not allowed multi http method for " + swaggerGenerator.getCls().getName()); } swaggerGenerator.setHttpMethod(requestMethods[0].name()); }
protected SwaggerGenerator generateSwagger(CONTEXT context) { SwaggerGeneratorContext generatorContext = compositeSwaggerGeneratorContext.selectContext(context.getProviderClass()); SwaggerGenerator generator = new SwaggerGenerator(generatorContext, context.getProviderClass()); generator.setClassLoader(context.getMicroserviceMeta().getClassLoader()); generator.setPackageName( SchemaUtils.generatePackageName(context.getMicroserviceMeta(), context.getSchemaId())); generator.generate(); return generator; } }
@Override public void process(Object annotation, SwaggerGenerator swaggerGenerator) { SwaggerDefinition definitionAnnotation = (SwaggerDefinition) annotation; Swagger swagger = swaggerGenerator.getSwagger(); swaggerGenerator.setBasePath(definitionAnnotation.basePath()); swagger.setHost(definitionAnnotation.host()); convertConsumes(definitionAnnotation, swagger); convertProduces(definitionAnnotation, swagger); convertSchemes(definitionAnnotation, swagger); convertTags(definitionAnnotation, swagger); convertInfo(definitionAnnotation.info(), swagger); swagger.setExternalDocs(convertExternalDocs(definitionAnnotation.externalDocs())); }
public static Class<?> getOrCreateBodyClass(OperationGenerator operationGenerator, List<BodyParameter> bodyParameters) { SwaggerGenerator swaggerGenerator = operationGenerator.getSwaggerGenerator(); Method method = operationGenerator.getProviderMethod(); String clsName = swaggerGenerator.ensureGetPackageName() + "." + method.getName() + "Body"; Class<?> cls = getClassByName(swaggerGenerator.getClassLoader(), clsName); if (cls != null) { return cls; } ClassConfig classConfig = new ClassConfig(); classConfig.setClassName(clsName); // 1.全是预备body // 2.预备body与明确body混合 SwaggerToClassGenerator classGenerator = new SwaggerToClassGenerator(swaggerGenerator.getClassLoader(), swaggerGenerator.getSwagger(), swaggerGenerator.ensureGetPackageName()); for (BodyParameter bp : bodyParameters) { JavaType javaType = ConverterMgr.findJavaType(classGenerator, bp); classConfig.addField(bp.getName(), javaType); } return JavassistUtils.createClass(swaggerGenerator.getClassLoader(), classConfig); }
/** * 查找必填但是没值的字段,将之设置为默认值 * 如果无法构造默认值,则抛出异常 */ protected void correctSwagger() { if (StringUtils.isEmpty(swagger.getSwagger())) { swagger.setSwagger("2.0"); } correctBasePath(); correctInfo(); correctProduces(); correctConsumes(); }
public Swagger generate() { for (Annotation annotation : cls.getAnnotations()) { ClassAnnotationProcessor processor = context.findClassAnnotationProcessor(annotation.annotationType()); if (processor == null) { continue; } processor.process(annotation, this); } scanMethods(); addOperationsToSwagger(); correctSwagger(); return swagger; }
@Override public void process(Object annotation, SwaggerGenerator swaggerGenerator) { Path path = (Path) annotation; swaggerGenerator.setBasePath(path.value()); } }
protected void addOperationToSwagger() { if (StringUtils.isEmpty(httpMethod)) { return; } Path pathObj = swagger.getPath(path); if (pathObj == null) { pathObj = new Path(); swagger.path(path, pathObj); } HttpMethod hm = HttpMethod.valueOf(httpMethod.toUpperCase(Locale.US)); if (pathObj.getOperationMap().get(hm) != null) { throw new Error(String.format("Only allowed one default path. %s:%s", swaggerGenerator.getCls().getName(), providerMethod.getName())); } pathObj.set(httpMethod, operation); } }
private void setTags(Api api, SwaggerGenerator swaggerGenerator) { String[] tags = api.tags(); for (String tagName : tags) { if (StringUtils.isEmpty(tagName)) { continue; } swaggerGenerator.addDefaultTag(tagName); } } }
protected SwaggerGenerator generateSwagger(CONTEXT context) { SwaggerGeneratorContext generatorContext = compositeSwaggerGeneratorContext.selectContext(context.getProviderClass()); SwaggerGenerator generator = new SwaggerGenerator(generatorContext, context.getProviderClass()); generator.setClassLoader(context.getMicroserviceMeta().getClassLoader()); generator.setPackageName( SchemaUtils.generatePackageName(context.getMicroserviceMeta(), context.getSchemaId())); generator.generate(); return generator; } }
@Override public void process(Object annotation, SwaggerGenerator swaggerGenerator) { SwaggerDefinition definitionAnnotation = (SwaggerDefinition) annotation; Swagger swagger = swaggerGenerator.getSwagger(); swaggerGenerator.setBasePath(definitionAnnotation.basePath()); swagger.setHost(definitionAnnotation.host()); convertConsumes(definitionAnnotation, swagger); convertProduces(definitionAnnotation, swagger); convertSchemes(definitionAnnotation, swagger); convertTags(definitionAnnotation, swagger); convertInfo(definitionAnnotation.info(), swagger); swagger.setExternalDocs(convertExternalDocs(definitionAnnotation.externalDocs())); }
public static Class<?> getOrCreateBodyClass(OperationGenerator operationGenerator, List<BodyParameter> bodyParameters) { SwaggerGenerator swaggerGenerator = operationGenerator.getSwaggerGenerator(); Method method = operationGenerator.getProviderMethod(); String clsName = swaggerGenerator.ensureGetPackageName() + "." + method.getName() + "Body"; Class<?> cls = getClassByName(swaggerGenerator.getClassLoader(), clsName); if (cls != null) { return cls; } ClassConfig classConfig = new ClassConfig(); classConfig.setClassName(clsName); // 1.全是预备body // 2.预备body与明确body混合 SwaggerToClassGenerator classGenerator = new SwaggerToClassGenerator(swaggerGenerator.getClassLoader(), swaggerGenerator.getSwagger(), swaggerGenerator.ensureGetPackageName()); for (BodyParameter bp : bodyParameters) { JavaType javaType = ConverterMgr.findJavaType(classGenerator, bp); classConfig.addField(bp.getName(), javaType); } return JavassistUtils.createClass(swaggerGenerator.getClassLoader(), classConfig); }
/** * 查找必填但是没值的字段,将之设置为默认值 * 如果无法构造默认值,则抛出异常 */ protected void correctSwagger() { if (StringUtils.isEmpty(swagger.getSwagger())) { swagger.setSwagger("2.0"); } correctBasePath(); correctInfo(); correctProduces(); correctConsumes(); }
protected void processMethod(RequestMethod[] requestMethods, SwaggerGenerator swaggerGenerator) { if (null == requestMethods || requestMethods.length == 0) { return; } if (requestMethods.length > 1) { throw new Error( "not allowed multi http method for " + swaggerGenerator.getCls().getName()); } swaggerGenerator.setHttpMethod(requestMethods[0].name()); }
public Swagger generate() { for (Annotation annotation : cls.getAnnotations()) { ClassAnnotationProcessor processor = context.findClassAnnotationProcessor(annotation.annotationType()); if (processor == null) { continue; } processor.process(annotation, this); } scanMethods(); addOperationsToSwagger(); correctSwagger(); return swagger; }
@Override public void process(Object annotation, SwaggerGenerator swaggerGenerator) { Path path = (Path) annotation; swaggerGenerator.setBasePath(path.value()); } }
protected void addOperationToSwagger() { if (StringUtils.isEmpty(httpMethod)) { return; } Path pathObj = swagger.getPath(path); if (pathObj == null) { pathObj = new Path(); swagger.path(path, pathObj); } HttpMethod hm = HttpMethod.valueOf(httpMethod.toUpperCase(Locale.US)); if (pathObj.getOperationMap().get(hm) != null) { throw new Error(String.format("Only allowed one default path. %s:%s", swaggerGenerator.getCls().getName(), providerMethod.getName())); } pathObj.set(httpMethod, operation); } }