public static String generatePackageName(MicroserviceMeta microserviceMeta, String schemaId) { String name = "cse.gen." + microserviceMeta.getAppId() + "." + microserviceMeta.getShortName() + "." + schemaId; return ClassUtils.correctClassName(name); }
protected void mapDefinitionsToExistingClasses() { interfaceCls = ClassUtils.getClassByName(classLoader, interfaceName); if (interfaceCls == null) { return; } // TODO: map }
@Override public boolean canProcess(Class<?> cls) { return ClassUtils.hasAnnotation(cls, RequestMapping.class) || ClassUtils.hasAnnotation(cls, RestController.class); }
protected JavaType getOrCreateType(SwaggerToClassGenerator swaggerToClassGenerator, ModelImpl modelImpl) { String clsName = ClassUtils.getClassName(findVendorExtensions(modelImpl)); clsName = ClassUtils.correctClassName(clsName); return getOrCreateType(swaggerToClassGenerator, modelImpl.getProperties(), clsName); }
Parameter param = params[idx]; String paramName = org.apache.servicecomb.swagger.generator.core.utils.ClassUtils .correctMethodParameterName(operationMeta.getParamName(idx)); config.addField(paramName, param.getParameterizedType());
protected void updateJavaClassInVendor(Map<String, Object> vendorExtensions, String shortClsName) { String clsName = ClassUtils.getClassName(vendorExtensions); if (StringUtils.isEmpty(clsName)) { vendorExtensions.put(SwaggerConst.EXT_JAVA_CLASS, packageName + "." + shortClsName); } }
public static String getClassName(Map<String, Object> vendorExtensions) { return getVendorExtension(vendorExtensions, SwaggerConst.EXT_JAVA_CLASS); }
protected void collectInterfaceName() { if (interfaceName != null) { return; } if (swagger.getInfo() != null) { interfaceName = ClassUtils.getInterfaceName(swagger.getInfo().getVendorExtensions()); if (interfaceName != null) { return; } } interfaceName = packageName + ".SchemaInterface"; }
protected void mergeBodyBasedParameters(OperationGenerator operationGenerator, List<BodyParameter> bodyParameters) { List<Parameter> swaggerParameters = operationGenerator.getSwaggerParameters(); swaggerParameters.removeAll(bodyParameters); // 将这些body包装为一个class,整体做为一个body参数 String bodyParamName = ParamUtils.generateBodyParameterName(operationGenerator.getProviderMethod()); Class<?> cls = ClassUtils.getOrCreateBodyClass(operationGenerator, bodyParameters); BodyParameter bodyParameter = ParamUtils.createBodyParameter(operationGenerator.getSwagger(), bodyParamName, cls); swaggerParameters.add(bodyParameter); }
@Override public ParamValueProcessor create(Parameter parameter, Type genericParamType) { JavaType targetType = TypeFactory.defaultInstance().constructType(genericParamType); boolean rawJson = ClassUtils.isRawJsonType(parameter); if (genericParamType.getTypeName().equals(String.class.getTypeName()) && rawJson) { return new RawJsonBodyProcessor(targetType, parameter.getRequired()); } return new BodyProcessor(targetType, parameter.getRequired()); } }
protected JavaType getOrCreateType(SwaggerToClassGenerator swaggerToClassGenerator, ModelImpl modelImpl) { String clsName = ClassUtils.getClassName(findVendorExtensions(modelImpl)); clsName = ClassUtils.correctClassName(clsName); return getOrCreateType(swaggerToClassGenerator, modelImpl.getProperties(), clsName); }
protected void convertToInterface() { if (interfaceCls != null) { return; } ClassConfig classConfig = new ClassConfig(); classConfig.setClassName(interfaceName); classConfig.setIntf(true); if (swagger.getPaths() != null) { for (Path path : swagger.getPaths().values()) { for (Operation operation : path.getOperations()) { Response result = operation.getResponses().get(SwaggerConst.SUCCESS_KEY); JavaType resultJavaType = swaggerObjectMap.get(result.getSchema()); MethodConfig methodConfig = new MethodConfig(); methodConfig.setName(operation.getOperationId()); methodConfig.setResult(resultJavaType); for (Parameter parameter : operation.getParameters()) { String paramName = parameter.getName(); paramName = ClassUtils.correctMethodParameterName(paramName); JavaType paramJavaType = ConverterMgr.findJavaType(this, parameter); methodConfig.addParameter(paramName, paramJavaType); } classConfig.addMethod(methodConfig); } } } interfaceCls = JavassistUtils.createClass(classLoader, classConfig); }
@Override public JavaType convert(SwaggerToClassGenerator swaggerToClassGenerator, Object def) { Map<String, Object> vendorExtensions = findVendorExtensions(def); String canonical = ClassUtils.getClassName(vendorExtensions); if (!StringUtils.isEmpty(canonical)) { try { return swaggerToClassGenerator.getTypeFactory().constructFromCanonical(canonical); } catch (Throwable e) { // ignore this } } return doConvert(swaggerToClassGenerator, def); } }
public static String getInterfaceName(Map<String, Object> vendorExtensions) { return getVendorExtension(vendorExtensions, SwaggerConst.EXT_JAVA_INTF); }
protected void collectInterfaceName() { if (interfaceName != null) { return; } if (swagger.getInfo() != null) { interfaceName = ClassUtils.getInterfaceName(swagger.getInfo().getVendorExtensions()); if (interfaceName != null) { return; } } interfaceName = packageName + ".SchemaInterface"; }
protected void mergeBodyBasedParameters(OperationGenerator operationGenerator, List<BodyParameter> bodyParameters) { List<Parameter> swaggerParameters = operationGenerator.getSwaggerParameters(); swaggerParameters.removeAll(bodyParameters); // 将这些body包装为一个class,整体做为一个body参数 String bodyParamName = ParamUtils.generateBodyParameterName(operationGenerator.getProviderMethod()); Class<?> cls = ClassUtils.getOrCreateBodyClass(operationGenerator, bodyParameters); BodyParameter bodyParameter = ParamUtils.createBodyParameter(operationGenerator.getSwagger(), bodyParamName, cls); swaggerParameters.add(bodyParameter); }
@Override public ParamValueProcessor create(Parameter parameter, Type genericParamType) { JavaType targetType = TypeFactory.defaultInstance().constructType(genericParamType); boolean rawJson = ClassUtils.isRawJsonType(parameter); if (genericParamType.getTypeName().equals(String.class.getTypeName()) && rawJson) { return new RawJsonBodyProcessor(targetType, parameter.getRequired()); } return new BodyProcessor(targetType, parameter.getRequired()); } }
public WrapSchema getOrCreateSchema(Type type) { JavaType javaType = TypeFactory.defaultInstance().constructType(type); // List<String> -> java.util.List<java.lang.String> // List<List<String>> -> java.util.List<java.util.List<java.lang.String>> String key = javaType.toCanonical(); return schemaCache.computeIfAbsent(key, k -> { if (!ProtobufSchemaUtils.isNeedWrap(javaType.getRawClass())) { // 可以直接使用 Schema<?> schema = RuntimeSchema.createFrom(javaType.getRawClass()); return WrapSchemaFactory.createSchema(schema, WrapType.NOT_WRAP); } // 需要包装 WrapClassConfig config = new WrapClassConfig(); config.setType(WrapType.NORMAL_WRAP); config.setClassName( "gen.wrap.protobuf." + org.apache.servicecomb.swagger.generator.core.utils.ClassUtils.correctClassName(key)); if (!Void.TYPE.isAssignableFrom(javaType.getRawClass())) { config.addField("field0", javaType); } JavassistUtils.genSingleWrapperInterface(config); return createWrapSchema(config); }); }
@Override protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { builder.addPropertyValue(PojoConst.FIELD_MICROSERVICE_NAME, element.getAttribute(PojoConst.MICROSERVICE_NAME)); String schemaId = element.getAttribute(PojoConst.SCHEMA_ID); String intf = element.getAttribute(PojoConst.INTERFACE); if (StringUtils.isEmpty(intf) && !StringUtils.isEmpty(schemaId)) { // 尝试将schemaId当作接口名使用 Class<?> consumerIntf = ClassUtils.getClassByName(null, schemaId); if (consumerIntf != null) { intf = schemaId; } } builder.addPropertyValue(PojoConst.FIELD_SCHEMA_ID, schemaId); builder.addPropertyValue(PojoConst.FIELD_INTERFACE, intf); if (StringUtils.isEmpty(schemaId) && StringUtils.isEmpty(intf)) { throw new Error("schema-id and interface can not both be empty."); } } }
@Override public boolean canProcess(Class<?> cls) { return ClassUtils.hasAnnotation(cls, Path.class); }