You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by GitBox <gi...@apache.org> on 2019/02/01 03:02:32 UTC

[GitHub] bettermanzzy opened a new issue #1085: Try to support spring-cloud-gateway

bettermanzzy opened a new issue #1085: Try to support spring-cloud-gateway
URL: https://github.com/apache/servicecomb-java-chassis/issues/1085
 
 
   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.
   
   ```java
   @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
   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.
   

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services