Skip to content

Try to support spring-cloud-gateway #1085

@zaneChou1

Description

@zaneChou1

I have try to support spring-cloud-gateway in ServiceComb-java-chassis.

I have used spring-cloud-gateway to run demo program in java-chassis. The result is correct and forwarding function of gateway is OK.

but when I use use gateway-webflux to write the following code , some errors have occurred.

@RestSchema(schemaId="gatewaySampleController ")
@RequestMapping("/")
public class GatewaySampleController {
    @Value("${remote.home}")
    private URI home;
    @GetMapping("/test")
    public Mono<ResponseEntity<byte[]>> proxy(ProxyExchange<byte[]> proxy) throws Exception {
      return proxy.uri(home.toString() + "/image/png").get();
    }
}

The error message is as follows :

java.lang.IllegalStateException: ServiceComb init failed.
	at org.apache.servicecomb.core.SCBEngine.init(SCBEngine.java:220) ~[classes/:na]
	at org.apache.servicecomb.core.CseApplicationListener.onApplicationEvent(CseApplicationListener.java:81) ~[classes/:na]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172) ~[spring-context-5.0.6.RELEASE.jar:5.0.6.RELEASE]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165) ~[spring-context-5.0.6.RELEASE.jar:5.0.6.RELEASE]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139) ~[spring-context-5.0.6.RELEASE.jar:5.0.6.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:400) ~[spring-context-5.0.6.RELEASE.jar:5.0.6.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:354) ~[spring-context-5.0.6.RELEASE.jar:5.0.6.RELEASE]
	at org.springframework.boot.context.event.EventPublishingRunListener.running(EventPublishingRunListener.java:103) ~[spring-boot-2.0.2.RELEASE.jar:2.0.2.RELEASE]
	at org.springframework.boot.SpringApplicationRunListeners.running(SpringApplicationRunListeners.java:78) ~[spring-boot-2.0.2.RELEASE.jar:2.0.2.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:343) [spring-boot-2.0.2.RELEASE.jar:2.0.2.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1255) [spring-boot-2.0.2.RELEASE.jar:2.0.2.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1243) [spring-boot-2.0.2.RELEASE.jar:2.0.2.RELEASE]
	at gateway.GatewaySampleApplication.main(GatewaySampleApplication.java:21) [classes/:na]
Caused by: java.lang.Error: generate operation swagger failed, gateway.GatewaySampleController:proxy
	at org.apache.servicecomb.swagger.generator.core.SwaggerGenerator.scanMethods(SwaggerGenerator.java:276) ~[classes/:na]
	at org.apache.servicecomb.swagger.generator.core.SwaggerGenerator.generate(SwaggerGenerator.java:140) ~[classes/:na]
	at org.apache.servicecomb.core.definition.schema.AbstractSchemaFactory.generateSwagger(AbstractSchemaFactory.java:102) ~[classes/:na]
	at org.apache.servicecomb.core.definition.schema.ProducerSchemaFactory.createSchema(ProducerSchemaFactory.java:115) ~[classes/:na]
	at org.apache.servicecomb.core.definition.schema.ProducerSchemaFactory.createSchema(ProducerSchemaFactory.java:54) ~[classes/:na]
	at org.apache.servicecomb.core.definition.schema.AbstractSchemaFactory.getOrCreateSchema(AbstractSchemaFactory.java:58) ~[classes/:na]
	at org.apache.servicecomb.core.definition.schema.ProducerSchemaFactory.getOrCreateProducerSchema(ProducerSchemaFactory.java:76) ~[classes/:na]
	at org.apache.servicecomb.provider.rest.common.RestProducerProvider.init(RestProducerProvider.java:45) ~[classes/:na]
	at org.apache.servicecomb.core.provider.producer.ProducerProviderManager.init(ProducerProviderManager.java:51) ~[classes/:na]
	at org.apache.servicecomb.core.SCBEngine.doInit(SCBEngine.java:238) ~[classes/:na]
	at org.apache.servicecomb.core.SCBEngine.init(SCBEngine.java:209) ~[classes/:na]
	... 12 common frames omitted
Caused by: org.apache.servicecomb.foundation.common.exceptions.ServiceCombException: [simple type, class reactor.core.publisher.Mono] is abstract class. Must be a concrete type.
	at org.apache.servicecomb.swagger.extend.ModelResolverExt.checkType(ModelResolverExt.java:114) ~[classes/:na]
	at org.apache.servicecomb.swagger.extend.ModelResolverExt.resolve(ModelResolverExt.java:130) ~[classes/:na]
	at io.swagger.jackson.ModelResolver.resolve(ModelResolver.java:183) ~[swagger-core-1.5.12.jar:1.5.12]
	at io.swagger.converter.ModelConverterContextImpl.resolve(ModelConverterContextImpl.java:100) ~[swagger-core-1.5.12.jar:1.5.12]
	at io.swagger.jackson.ModelResolver.resolve(ModelResolver.java:234) ~[swagger-core-1.5.12.jar:1.5.12]
	at org.apache.servicecomb.swagger.extend.ModelResolverExt.resolve(ModelResolverExt.java:125) ~[classes/:na]
	at io.swagger.jackson.ModelResolver.resolve(ModelResolver.java:183) ~[swagger-core-1.5.12.jar:1.5.12]
	at io.swagger.converter.ModelConverterContextImpl.resolve(ModelConverterContextImpl.java:100) ~[swagger-core-1.5.12.jar:1.5.12]
	at io.swagger.converter.ModelConverters.readAll(ModelConverters.java:83) ~[swagger-core-1.5.12.jar:1.5.12]
	at org.apache.servicecomb.swagger.generator.core.utils.ParamUtils.addDefinitions(ParamUtils.java:116) ~[classes/:na]
	at org.apache.servicecomb.swagger.generator.core.processor.response.DefaultResponseTypeProcessor.process(DefaultResponseTypeProcessor.java:39) ~[classes/:na]
	at org.apache.servicecomb.swagger.generator.core.OperationGenerator.createResponseProperty(OperationGenerator.java:426) ~[classes/:na]
	at org.apache.servicecomb.swagger.generator.core.OperationGenerator.scanResponse(OperationGenerator.java:413) ~[classes/:na]
	at org.apache.servicecomb.swagger.generator.core.OperationGenerator.generate(OperationGenerator.java:181) ~[classes/:na]
	at org.apache.servicecomb.swagger.generator.core.SwaggerGenerator.scanMethods(SwaggerGenerator.java:272) ~[classes/:na]
	... 22 common frames omitted

To my opinion , the question occurs between gateway-webflux and swagger . According to error message, servicecomb swagger seem can not resolve abstract class. But the type used by webflux is Flux and Mono related to reaction time programming, and they are abstract classes. So, How to solve it?

What about other's opinion?please feel free to let me know.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions