use of io.swagger.models.Model in project java-chassis by ServiceComb.
the class AnnotationUtils method generateResponseProperty.
public static Property generateResponseProperty(Swagger swagger, ResponseConfigBase config) throws Error {
Class<?> responseClass = config.getResponseClass();
if (responseClass == null || ReflectionUtils.isVoid(responseClass)) {
return null;
}
if (!ClassUtils.isPrimitiveOrWrapper(responseClass)) {
Map<String, Model> newDefinitions = ModelConverters.getInstance().readAll(responseClass);
appendDefinition(swagger, newDefinitions);
}
Property property = ModelConverters.getInstance().readAsProperty(responseClass);
// 根据swagger定义这里是区分大小写的, 虽然不明白为何这样做,不过还是不要改标准了
switch(config.getResponseContainer()) {
case "List":
property = new ArrayProperty(property);
break;
case "Set":
property = new ArrayProperty(property);
((ArrayProperty) property).setUniqueItems(true);
break;
case "Map":
property = new MapProperty(property);
break;
case "":
// 不必处理
break;
default:
throw new Error("not support responseContainer " + config.getResponseContainer());
}
return property;
}
use of io.swagger.models.Model in project java-chassis by ServiceComb.
the class TestSwaggerUtils method testConverter.
@Test
public void testConverter() {
SwaggerGenerator generator = new SwaggerGeneratorForTest(context, null);
Swagger swagger = generator.getSwagger();
ParamUtils.addDefinitions(swagger, User.class);
Model model = swagger.getDefinitions().get("User");
model.getVendorExtensions().clear();
JavaType javaType = ConverterMgr.findJavaType(generator, model);
checkJavaType(swagger, javaType);
RefModel refModel = new RefModel();
refModel.setReference("User");
javaType = ConverterMgr.findJavaType(generator, refModel);
checkJavaType(swagger, javaType);
}
use of io.swagger.models.Model in project java-chassis by ServiceComb.
the class ArgumentsMapperFactory method processBodyFieldArgMapper.
// 将多个provider参数映射为契约body的field
// value为field在provider参数中的下标
protected void processBodyFieldArgMapper(ArgumentsMapperConfig config, int swaggerIdx) {
Class<?>[] swaggerParameterTypes = config.getSwaggerMethod().getParameterTypes();
Class<?> swaggerParameterType = swaggerParameterTypes[swaggerIdx];
BodyParameter bp = (BodyParameter) config.getSwaggerParameters().get(swaggerIdx);
Model model = bp.getSchema();
if (RefModel.class.isInstance(model)) {
String refName = ((RefModel) model).getSimpleRef();
model = config.getSwagger().getDefinitions().get(refName);
}
Map<Integer, Field> fieldMap = new HashMap<>();
for (String propertyName : model.getProperties().keySet()) {
// 理论上应该只在provider的body类型的参数中查找,不过正常定义契约不会有问题的,先不用处理了
int providerIdx = findInParameters(propertyName, config.getProviderParameters());
if (providerIdx >= 0) {
Field field = ReflectionUtils.findField(swaggerParameterType, propertyName);
field.setAccessible(true);
fieldMap.put(providerIdx, field);
continue;
}
String msg = generateSkipParamInfo("body parameter field", config, propertyName);
LOGGER.warn(msg);
}
ArgumentMapper bodyFieldArg = createBodyFieldArgMapper(config, swaggerIdx, fieldMap);
config.addArgumentMapper(bodyFieldArg);
}
use of io.swagger.models.Model in project camel by apache.
the class RestModelConverters method readClass.
public Map<String, Model> readClass(Class clazz) {
String name = clazz.getName();
Map<String, Model> resolved = super.read(clazz);
if (resolved != null) {
for (Model model : resolved.values()) {
// enrich with the class name of the model
model.getVendorExtensions().put("x-className", new StringProperty(name));
}
// read any extra using read-all
Map<String, Model> extra = super.readAll(clazz);
if (extra != null) {
for (Map.Entry<String, Model> entry : extra.entrySet()) {
if (!resolved.containsKey(entry.getKey())) {
resolved.put(entry.getKey(), entry.getValue());
}
}
}
}
return resolved;
}
use of io.swagger.models.Model in project swagger-core by swagger-api.
the class ModelResolver method resolveProperty.
public Property resolveProperty(JavaType propType, ModelConverterContext context, Annotation[] annotations, Iterator<ModelConverter> next) {
LOGGER.debug("resolveProperty {}", propType);
Property property = null;
if (propType.isContainerType()) {
JavaType keyType = propType.getKeyType();
JavaType valueType = propType.getContentType();
if (keyType != null && valueType != null) {
property = new MapProperty().additionalProperties(context.resolveProperty(valueType, new Annotation[] {}));
} else if (valueType != null) {
Property items = context.resolveProperty(valueType, new Annotation[] {});
// If property is XmlElement annotated, then use the name provided by annotation | https://github.com/swagger-api/swagger-core/issues/2047
if (annotations != null && annotations.length > 0) {
for (Annotation annotation : annotations) {
if (annotation instanceof XmlElement) {
XmlElement xmlElement = (XmlElement) annotation;
if (xmlElement != null && xmlElement.name() != null && !"".equals(xmlElement.name()) && !"##default".equals(xmlElement.name())) {
Xml xml = items.getXml() != null ? items.getXml() : new Xml();
xml.setName(xmlElement.name());
items.setXml(xml);
}
}
}
}
ArrayProperty arrayProperty = new ArrayProperty().items(items);
if (_isSetType(propType.getRawClass())) {
arrayProperty.setUniqueItems(true);
}
property = arrayProperty;
}
} else {
property = PrimitiveType.createProperty(propType);
}
if (property == null) {
if (propType.isEnumType()) {
property = new StringProperty();
_addEnumProps(propType.getRawClass(), property);
} else if (_isOptionalType(propType)) {
property = context.resolveProperty(propType.containedType(0), null);
} else {
// complex type
Model innerModel = context.resolve(propType);
if (innerModel instanceof ComposedModel) {
innerModel = ((ComposedModel) innerModel).getChild();
}
if (innerModel instanceof ModelImpl) {
ModelImpl mi = (ModelImpl) innerModel;
property = new RefProperty(StringUtils.isNotEmpty(mi.getReference()) ? mi.getReference() : mi.getName());
}
}
}
return property;
}
Aggregations