Skip to content

Commit

Permalink
Merge 590638a into 26cbe80
Browse files Browse the repository at this point in the history
  • Loading branch information
wujimin committed May 4, 2018
2 parents 26cbe80 + 590638a commit 492f7a3
Show file tree
Hide file tree
Showing 41 changed files with 700 additions and 514 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -68,9 +68,7 @@ public void init(SchemaMeta schemaMeta, Method method, String operationPath, Str

executor = ExecutorManager.findExecutor(this);

responsesMeta.init(schemaMeta.getMicroserviceMeta().getClassLoader(),
schemaMeta.getPackageName(),
schemaMeta.getSwagger(),
responsesMeta.init(schemaMeta.getSwaggerToClassGenerator(),
swaggerOperation,
method.getGenericReturnType());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
import org.apache.servicecomb.core.Handler;
import org.apache.servicecomb.core.exception.ExceptionUtils;
import org.apache.servicecomb.foundation.common.utils.ReflectUtils;
import org.apache.servicecomb.swagger.generator.core.utils.ClassUtils;
import org.apache.servicecomb.swagger.converter.SwaggerToClassGenerator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand Down Expand Up @@ -54,6 +54,8 @@ public class SchemaMeta extends CommonService<OperationMeta> {

private List<Handler> providerHandlerChain;

private SwaggerToClassGenerator swaggerToClassGenerator;

public SchemaMeta(Swagger swagger, MicroserviceMeta microserviceMeta, String schemaId) {
this.packageName = SchemaUtils.generatePackageName(microserviceMeta, schemaId);

Expand All @@ -62,15 +64,20 @@ public SchemaMeta(Swagger swagger, MicroserviceMeta microserviceMeta, String sch

this.microserviceMeta = microserviceMeta;
this.microserviceQualifiedName = microserviceMeta.getName() + "." + schemaId;
// 确保swagger对应的接口是存在的
swaggerIntf = ClassUtils.getOrCreateInterface(swagger, microserviceMeta.getClassLoader(), packageName);

swaggerToClassGenerator = new SwaggerToClassGenerator(microserviceMeta.getClassLoader(), swagger, packageName);
swaggerIntf = swaggerToClassGenerator.convert();

createOperationMgr("schemaMeta " + schemaId + " operation mgr");
operationMgr.setRegisterErrorFmt("Operation name repeat, schema=%s, operation=%s");

initOperations();
}

public SwaggerToClassGenerator getSwaggerToClassGenerator() {
return swaggerToClassGenerator;
}

public String getPackageName() {
return packageName;
}
Expand All @@ -92,7 +99,7 @@ private void initOperations() {
// in this place, do not throw exception when method not exists
// eg:
// swagger interface is a.b.c, and consumer interface is a.b.c too.
// version 1, there are the same
// version 1, they are the same
// version 2, producer add a new operation, that means swagger have more operation than consumer interface a.b.c
// interface a.b.c in consumer process is the old interface
// so for swagger, can not do any valid check here
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@
import org.apache.servicecomb.swagger.generator.core.CompositeSwaggerGeneratorContext;
import org.apache.servicecomb.swagger.generator.core.SwaggerGenerator;
import org.apache.servicecomb.swagger.generator.core.SwaggerGeneratorContext;
import org.apache.servicecomb.swagger.generator.core.utils.ClassUtils;

import io.swagger.models.Swagger;

Expand Down Expand Up @@ -108,8 +107,6 @@ protected SwaggerGenerator generateSwagger(CONTEXT context) {
SchemaUtils.generatePackageName(context.getMicroserviceMeta(), context.getSchemaId()));
generator.generate();

// 确保接口是存在的
ClassUtils.getOrCreateInterface(generator);
return generator;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ public SchemaMeta getOrCreateProducerSchema(String microserviceName, String sche

SchemaMeta schemaMeta = getOrCreateSchema(context);

SwaggerProducer producer = swaggerEnv.createProducer(producerInstance, schemaMeta.getSwagger());
SwaggerProducer producer = swaggerEnv.createProducer(producerInstance, schemaMeta.getSwaggerIntf());
Executor reactiveExecutor = BeanUtils.getBean(ExecutorManager.EXECUTOR_REACTIVE);
for (OperationMeta operationMeta : schemaMeta.getOperations()) {
SwaggerProducerOperation producerOperation = producer.findOperation(operationMeta.getOperationId());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,8 @@ public void testMicroserviceMetaManager() throws Exception {
Info oInfo = new Info();
oInfo.setVendorExtension("x-java-interface", "java.lang.String");
oSwagger.setInfo(oInfo);
Assert.assertEquals("java.lang.String", (ClassUtils.getJavaInterface(oSwagger)).getName());
Assert.assertEquals("java.lang.String",
(ClassUtils.getInterfaceName(oSwagger.getInfo().getVendorExtensions())));
oInfo.setVendorExtension("x-java-class", "java.lang.String");
}
}
4 changes: 4 additions & 0 deletions integration-tests/test-common/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,10 @@
<groupId>io.zipkin.brave</groupId>
<artifactId>brave-context-log4j12</artifactId>
</dependency>
<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
</dependency>
</dependencies>

<build>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@

import java.util.Map;

import org.apache.servicecomb.swagger.generator.core.SwaggerConst;
import org.apache.servicecomb.swagger.generator.core.utils.ClassUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -28,33 +27,29 @@
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.type.TypeFactory;

import io.swagger.models.Swagger;

public abstract class AbstractConverter implements Converter {
private static final Logger LOGGER = LoggerFactory.getLogger(AbstractConverter.class);

protected abstract Map<String, Object> findVendorExtensions(Object def);

protected abstract JavaType doConvert(ClassLoader classLoader, String packageName, Swagger swagger, Object def);
protected abstract JavaType doConvert(SwaggerToClassGenerator swaggerToClassGenerator, Object def);

@Override
public JavaType convert(ClassLoader classLoader, String packageName, Swagger swagger, Object def) {
TypeFactory typeFactory = TypeFactory
.defaultInstance()
.withClassLoader(classLoader);
public JavaType convert(SwaggerToClassGenerator swaggerToClassGenerator, Object def) {
TypeFactory typeFactory = swaggerToClassGenerator.getTypeFactory();

Map<String, Object> vendorExtensions = findVendorExtensions(def);
String canonical = ClassUtils.getVendorExtension(vendorExtensions, SwaggerConst.EXT_JAVA_CLASS);
String canonical = ClassUtils.getClassName(vendorExtensions);
if (!StringUtils.isEmpty(canonical)) {
Class<?> clsResult = ClassUtils.getClassByName(classLoader, canonical);
Class<?> clsResult = ClassUtils.getClassByName(swaggerToClassGenerator.getClassLoader(), canonical);
if (clsResult != null) {
return typeFactory.constructType(clsResult);
}
}

// ensure all depend model exist
// maybe create dynamic class by canonical
JavaType result = doConvert(classLoader, packageName, swagger, def);
JavaType result = doConvert(swaggerToClassGenerator, def);

String rawClassName = ClassUtils.getRawClassName(canonical);
if (StringUtils.isEmpty(rawClassName)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,8 @@

import com.fasterxml.jackson.databind.JavaType;

import io.swagger.models.Swagger;

public interface Converter {
// def可能是property或model
// def不可能为null
JavaType convert(ClassLoader classLoader, String packageName, Swagger swagger, Object def);
JavaType convert(SwaggerToClassGenerator swaggerToClassGenerator, Object def);
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,17 +38,14 @@
import org.apache.servicecomb.swagger.converter.property.StringPropertyConverter;
import org.apache.servicecomb.swagger.extend.property.ByteProperty;
import org.apache.servicecomb.swagger.extend.property.ShortProperty;
import org.apache.servicecomb.swagger.generator.core.SwaggerGenerator;

import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.type.SimpleType;
import com.fasterxml.jackson.databind.type.TypeFactory;

import io.swagger.models.ArrayModel;
import io.swagger.models.Model;
import io.swagger.models.ModelImpl;
import io.swagger.models.RefModel;
import io.swagger.models.Swagger;
import io.swagger.models.parameters.BodyParameter;
import io.swagger.models.parameters.CookieParameter;
import io.swagger.models.parameters.FormParameter;
Expand Down Expand Up @@ -167,7 +164,7 @@ private static void addInnerConverter(Class<? extends Property> propertyCls) {
throw new Error("not support inner property class: " + propertyCls.getName());
}

converterMap.put(propertyCls, (classLoader, packageName, swagger, def) -> javaType);
converterMap.put(propertyCls, (context, def) -> javaType);
}

public static void addConverter(Class<?> cls, Converter converter) {
Expand All @@ -179,16 +176,9 @@ public static JavaType findJavaType(String type, String format) {
return TYPE_FORMAT_MAP.get(key);
}

public static JavaType findJavaType(SwaggerGenerator generator, Object def) {
return findJavaType(generator.getClassLoader(),
generator.ensureGetPackageName(),
generator.getSwagger(),
def);
}

// def为null是void的场景
// def可能是model、property、parameter
public static JavaType findJavaType(ClassLoader classLoader, String packageName, Swagger swagger, Object def) {
public static JavaType findJavaType(SwaggerToClassGenerator swaggerToClassGenerator, Object def) {
if (def == null) {
return VOID_JAVA_TYPE;
}
Expand All @@ -197,14 +187,6 @@ public static JavaType findJavaType(ClassLoader classLoader, String packageName,
throw new Error("not support def type: " + def.getClass());
}

return converter.convert(classLoader, packageName, swagger, def);
}

public static JavaType findByRef(ClassLoader classLoader, String packageName, Swagger swagger, String refName) {
Model ref = swagger.getDefinitions().get(refName);
if (ModelImpl.class.isInstance(ref) && ((ModelImpl) ref).getName() == null) {
((ModelImpl) ref).setName(refName);
}
return findJavaType(classLoader, packageName, swagger, ref);
return converter.convert(swaggerToClassGenerator, def);
}
}

0 comments on commit 492f7a3

Please sign in to comment.