@JsonIgnore public Method getMethod() { return operationGenerator.getProviderMethod(); }
private void processMethod(RequestMethod[] requestMethods, OperationGenerator operationGenerator) { if (null == requestMethods || requestMethods.length == 0) { return; } if (requestMethods.length > 1) { throw new Error( String.format("not allowed multi http method for %s:%s", operationGenerator.getProviderMethod().getDeclaringClass().getName(), operationGenerator.getProviderMethod().getName())); } super.processMethod(requestMethods[0], operationGenerator); } }
protected void processPath(String[] paths, OperationGenerator operationGenerator) { if (null == paths || paths.length == 0) { return; } // swagger仅支持配一个path,否则将会出现重复的operationId if (paths.length > 1) { throw new Error(String.format("not allowed multi path for %s:%s", operationGenerator.getProviderMethod().getDeclaringClass().getName(), operationGenerator.getProviderMethod().getName())); } operationGenerator.setPath(paths[0]); }
@Override public void process(Object annotation, OperationGenerator operationGenerator, int paramIdx) { final Class<?> beanParamClazz = operationGenerator.getProviderMethod().getParameterTypes()[paramIdx]; Map<String, Parameter> swaggerParamMap = new HashMap<>(); try { // traversal fields, get those JAX-RS params traversalParamField(operationGenerator, beanParamClazz, swaggerParamMap); } catch (IllegalArgumentException | IntrospectionException e) { throw new Error(String.format( "Processing param failed, method=%s:%s, beanParamIdx=%d", operationGenerator.getProviderMethod().getDeclaringClass().getName(), operationGenerator.getProviderMethod().getName(), paramIdx) , e); } // set swagger params into operationGenerator, in declared field order Field[] declaredProducerFields = beanParamClazz.getDeclaredFields(); Arrays.stream(declaredProducerFields) .map(declaredProducerField -> swaggerParamMap.get(declaredProducerField.getName())) .filter(Objects::nonNull) .forEach(operationGenerator::addProviderParameter); }
@Override public void process(OperationGenerator operationGenerator, int paramIndex) { Model paramModel = getParamModel(operationGenerator, paramIndex); if (null == paramModel) { throw new Error(String.format("cannot find param, provider method is [%s], paramIndex = [%d]. " + "Please check your parameter definition.", operationGenerator.getProviderMethod().getName(), paramIndex)); } LinkedHashMap<String, AbstractSerializableParameter<?>> resultParamMap = getFlattenParams(paramModel); addProviderParams(operationGenerator, resultParamMap); }
protected void setParameterType(OperationGenerator operationGenerator, int paramIdx, T parameter) { ParamUtils.setParameterType(operationGenerator.getSwagger(), operationGenerator.getProviderMethod(), paramIdx, parameter); }
@Override public void process(OperationGenerator operationGenerator, int paramIdx) { Type paramType = ParamUtils.getGenericParameterType(operationGenerator.getProviderMethod(), paramIdx); Property property = ModelConverters.getInstance().readAsProperty(paramType); if (RefProperty.class.isInstance(property)) { objectParameterProcessor.process(operationGenerator, paramIdx); return; } if (!ParamUtils.isComplexProperty(property)) { simpleParameterProcessor.process(operationGenerator, paramIdx); return; } // unsupported param type String msg = String.format("cannot process parameter [%s], method=%s:%s, paramIdx=%d, type=%s", ParamUtils.getParameterName(operationGenerator.getProviderMethod(), paramIdx), operationGenerator.getProviderMethod().getDeclaringClass().getName(), operationGenerator.getProviderMethod().getName(), paramIdx, paramType.getTypeName()); throw new Error(msg); } }
@Override public Property process(OperationGenerator operationGenerator) { ParameterizedType type = (ParameterizedType) operationGenerator.getProviderMethod().getGenericReturnType(); Type responseType = type.getActualTypeArguments()[0]; ParamUtils.addDefinitions(operationGenerator.getSwagger(), responseType); return ModelConverters.getInstance().readAsProperty(responseType); } }
@Override public void process(OperationGenerator operationGenerator, int paramIdx) { String paramName = ParamUtils.getParameterName(operationGenerator.getProviderMethod(), paramIdx); QueryParameter queryParameter = new QueryParameter(); queryParameter.setName(paramName); ParamUtils.setParameterType(operationGenerator.getSwagger(), operationGenerator.getProviderMethod(), paramIdx, queryParameter); operationGenerator.addProviderParameter(queryParameter); } }
private Model getParamModel(OperationGenerator operationGenerator, int paramIndex) { Type paramType = ParamUtils.getGenericParameterType(operationGenerator.getProviderMethod(), paramIndex); Property property = ModelConverters.getInstance().readAsProperty(paramType); // ensure type if (!RefProperty.class.isInstance(property)) { LOGGER.error("Unsupported property type: [{}], paramIndex is [{}]", property.getClass().getName(), paramIndex); return null; } Map<String, Model> models = ModelConverters.getInstance().readAll(paramType); // find param root RefProperty refProperty = (RefProperty) property; String refTypeName = refProperty.getSimpleRef(); Model paramRoot = null; for (Entry<String, Model> entry : models.entrySet()) { if (refTypeName.equals(entry.getKey())) { paramRoot = entry.getValue(); break; } } return paramRoot; }
public static PendingBodyParameter createPendingBodyParameter(OperationGenerator operationGenerator, int paramIdx) { Method method = operationGenerator.getProviderMethod(); String paramName = ParamUtils.getParameterName(method, paramIdx); Type paramType = ParamUtils.getGenericParameterType(method, paramIdx); return createPendingBodyParameter(operationGenerator, paramName, paramType); }
@Override public Property process(OperationGenerator operationGenerator) { Type responseType = operationGenerator.getProviderMethod().getGenericReturnType(); ParamUtils.addDefinitions(operationGenerator.getSwagger(), responseType); return ModelConverters.getInstance().readAsProperty(responseType); } }
public BodyParameter createBodyParameter(String paramName) { String modelType = ParamUtils.generateBodyParameterName(operationGenerator.getProviderMethod()); RefModel model = toRefModel(modelType); setName(paramName); setSchema(model); try { return Json.mapper().readValue(Json.mapper().writeValueAsString(this), BodyParameter.class); } catch (IOException e) { throw new IllegalStateException("failed to createBodyParameter.", e); } }
protected void setParameterName(Object annotation, OperationGenerator operationGenerator, int paramIdx, T parameter) { String paramName = getAnnotationParameterName(annotation); paramName = ParamUtils.getParameterName(paramName, operationGenerator.getProviderMethod(), paramIdx); parameter.setName(paramName); }
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); }
public static BodyParameter createBodyParameter(OperationGenerator operationGenerator, int paramIdx) { Method method = operationGenerator.getProviderMethod(); String paramName = getParameterName(method, paramIdx); Type paramType = getGenericParameterType(method, paramIdx); return createBodyParameter(operationGenerator.getSwagger(), paramName, paramType); }
@Override public void process(OperationGenerator operationGenerator, int paramIdx) { FormParameter parameter = new FormParameter(); parameter.setType(new FileProperty().getType()); parameter.setName(ParamUtils.getParameterName(operationGenerator.getProviderMethod(), paramIdx)); operationGenerator.addProviderParameter(parameter); } }
@Override public void process(OperationGenerator operationGenerator, int paramIdx) { FormParameter parameter = new FormParameter(); parameter.setName(ParamUtils.getParameterName(operationGenerator.getProviderMethod(), paramIdx)); Property property = new ArrayProperty(new FileProperty()); parameter.setProperty(property); operationGenerator.addProviderParameter(parameter); } }
@Override public void process(OperationGenerator operationGenerator, int paramIdx) { FormParameter parameter = new FormParameter(); parameter.setName(ParamUtils.getParameterName(operationGenerator.getProviderMethod(), paramIdx)); Property property = new ArrayProperty(new FileProperty()); parameter.setProperty(property); operationGenerator.addProviderParameter(parameter); } }
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); }