use of org.apache.servicecomb.swagger.invocation.arguments.ContextArgumentMapperFactory in project java-chassis by ServiceComb.
the class SwaggerEnvironment method createConsumer.
public SwaggerConsumer createConsumer(Class<?> consumerIntf, Swagger swagger) {
Map<Class<?>, ContextArgumentMapperFactory> contextFactorys = SPIServiceUtils.getOrLoadSortedService(ConsumerContextArgumentMapperFactory.class).stream().collect(Collectors.toMap(ConsumerContextArgumentMapperFactory::getContextClass, Function.identity()));
ResponseMapperFactorys<ConsumerResponseMapper> consumerResponseMapperFactorys = new ResponseMapperFactorys<>(ConsumerResponseMapperFactory.class);
SwaggerOperations swaggerOperations = new SwaggerOperations(swagger);
SwaggerConsumer consumer = new SwaggerConsumer();
consumer.setConsumerIntf(consumerIntf);
for (Method consumerMethod : MethodUtils.findSwaggerMethods(consumerIntf)) {
String operationId = findOperationId(consumerMethod);
SwaggerOperation swaggerOperation = swaggerOperations.findOperation(operationId);
if (swaggerOperation == null) {
// consumer method set is bigger than contract, it's invalid
// but we need to support consumer upgrade before producer, so only log and ignore it.
LOGGER.warn("consumer method {}:{} not exist in contract.", consumerIntf.getName(), consumerMethod.getName());
continue;
}
ConsumerArgumentsMapperCreator creator = new ConsumerArgumentsMapperCreator(Json.mapper().getSerializationConfig(), contextFactorys, consumerIntf, consumerMethod, swaggerOperation);
ArgumentsMapper argsMapper = creator.createArgumentsMapper();
ConsumerResponseMapper responseMapper = consumerResponseMapperFactorys.createResponseMapper(consumerMethod.getGenericReturnType());
SwaggerConsumerOperation op = new SwaggerConsumerOperation();
op.setConsumerClass(consumerIntf);
op.setConsumerMethod(consumerMethod);
op.setSwaggerOperation(swaggerOperation);
op.setArgumentsMapper(argsMapper);
op.setResponseMapper(responseMapper);
consumer.addOperation(op);
}
return consumer;
}
use of org.apache.servicecomb.swagger.invocation.arguments.ContextArgumentMapperFactory in project java-chassis by ServiceComb.
the class SwaggerEnvironment method createProducer.
public SwaggerProducer createProducer(Object producerInstance, Class<?> schemaInterface, Swagger swagger) {
Class<?> producerCls = targetSwaggerClass(producerInstance, schemaInterface);
swagger = checkAndGenerateSwagger(producerCls, swagger);
Map<Class<?>, ContextArgumentMapperFactory> contextFactories = SPIServiceUtils.getOrLoadSortedService(ProducerContextArgumentMapperFactory.class).stream().collect(Collectors.toMap(ProducerContextArgumentMapperFactory::getContextClass, Function.identity()));
ResponseMapperFactorys<ProducerResponseMapper> producerResponseMapperFactorys = new ResponseMapperFactorys<>(ProducerResponseMapperFactory.class);
SwaggerOperations swaggerOperations = new SwaggerOperations(swagger);
Map<String, Method> visibleProducerMethods = MethodUtils.findSwaggerMethodsMapOfOperationId(producerCls);
SwaggerProducer producer = new SwaggerProducer();
producer.setSwagger(swagger);
producer.setProducerCls(producerCls);
producer.setProducerInstance(producerInstance);
for (SwaggerOperation swaggerOperation : swaggerOperations.getOperations().values()) {
String operationId = swaggerOperation.getOperationId();
// producer参数不一定等于swagger参数
Method producerMethod = visibleProducerMethods.getOrDefault(operationId, null);
if (producerMethod == null) {
// producer未实现契约,非法
String msg = String.format("operationId %s not exist in producer %s.", operationId, producerInstance.getClass().getName());
throw new IllegalStateException(msg);
}
ProducerArgumentsMapperCreator creator = new ProducerArgumentsMapperCreator(Json.mapper().getSerializationConfig(), contextFactories, producerCls, producerMethod, swaggerOperation);
ProducerArgumentsMapper argsMapper = creator.createArgumentsMapper();
ProducerResponseMapper responseMapper = producerResponseMapperFactorys.createResponseMapper(producerMethod.getGenericReturnType());
SwaggerProducerOperation op = new SwaggerProducerOperation();
op.setProducerClass(producerCls);
op.setProducerInstance(producerInstance);
op.setProducerMethod(producerMethod);
op.setSwaggerOperation(swaggerOperation);
op.setSwaggerParameterTypes(creator.getSwaggerParameterTypes());
op.setArgumentsMapper(argsMapper);
op.setResponseMapper(responseMapper);
producer.addOperation(op);
}
return producer;
}
Aggregations