membrane / api-gateway

API gateway for REST, OpenAPI, GraphQL and SOAP written in Java.
https://membrane-api.io
Apache License 2.0
457 stars 137 forks source link

OpenAPI rewriter not working #1171

Closed paulhyo closed 3 months ago

paulhyo commented 3 months ago

The openapi rewriter example is not working (membrane 5.5.3) --> https://github.com/membrane/api-gateway/tree/master/distribution/examples/rewriter/openapi

    <api port="2000">
        <openapi location="demo-api-v1.yml" validateRequests="yes">
            <rewrite host="predic8.de" port="3000" basePath="/foo" />
        </openapi>
    </api>

Starting membrane ... done Attaching to membrane membrane | Membrane Router running... membrane | Jul 05, 2024 8:44:12 AM com.predic8.membrane.core.config.spring.TrackingFileSystemXmlApplicationContext refresh membrane | WARNING: Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'router': Cannot create inner bean 'api#c5ee75e' of type [com.predic8.membrane.core.openapi.serviceproxy.APIProxy] while setting bean property 'rules[0]' membrane | org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'router': Cannot create inner bean 'api#c5ee75e' of type [com.predic8.membrane.core.openapi.serviceproxy.APIProxy] while setting bean property 'rules[0]' membrane | at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBeanValue(BeanDefinitionValueResolver.java:421) membrane | at org.springframework.beans.factory.support.BeanDefinitionValueResolver.lambda$resolveValueIfNecessary$0(BeanDefinitionValueResolver.java:149) membrane | at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:262) membrane | at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:148) membrane | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1687) membrane | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1436) membrane | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) membrane | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) membrane | at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) membrane | at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) membrane | at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) membrane | at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) membrane | at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:975) membrane | at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:962) membrane | at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:624) membrane | at com.predic8.membrane.core.Router.init(Router.java:146) membrane | at com.predic8.membrane.core.RouterCLI.main(RouterCLI.java:39) membrane | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) membrane | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) membrane | at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) membrane | at java.base/java.lang.reflect.Method.invoke(Unknown Source) membrane | at com.predic8.membrane.core.Starter.main(Starter.java:47) membrane | Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'api#c5ee75e': Cannot create inner bean 'openapi#5286c33a' of type [com.predic8.membrane.core.openapi.serviceproxy.OpenAPISpec] while setting bean property 'specs[0]' membrane | at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBeanValue(BeanDefinitionValueResolver.java:421) membrane | at org.springframework.beans.factory.support.BeanDefinitionValueResolver.lambda$resolveValueIfNecessary$0(BeanDefinitionValueResolver.java:149) membrane | at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:262) membrane | at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:148) membrane | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1687) membrane | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1436) membrane | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) membrane | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) membrane | at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBeanValue(BeanDefinitionValueResolver.java:407) membrane | ... 21 more membrane | Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'openapi#5286c33a': Cannot create inner bean 'rewrite#1506f20f' of type [com.predic8.membrane.core.openapi.serviceproxy.Rewrite] while setting bean property 'rewrite' membrane | at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBeanValue(BeanDefinitionValueResolver.java:421) membrane | at org.springframework.beans.factory.support.BeanDefinitionValueResolver.lambda$resolveValueIfNecessary$0(BeanDefinitionValueResolver.java:149) membrane | at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:262) membrane | at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:148) membrane | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1687) membrane | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1436) membrane | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) membrane | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) membrane | at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBeanValue(BeanDefinitionValueResolver.java:407) membrane | ... 29 more membrane | Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'rewrite#1506f20f': Cannot resolve reference to bean '3000' while setting bean property 'port' membrane | at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:377) membrane | at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:135) membrane | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1687) membrane | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1436) membrane | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) membrane | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) membrane | at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBeanValue(BeanDefinitionValueResolver.java:407) membrane | ... 37 more membrane | Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named '3000' available membrane | at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:895) membrane | at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1362) membrane | at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300) membrane | at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) membrane | at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:365) membrane | ... 43 more

predic8 commented 3 months ago

@paulhyo thanks for your error report. We have a look at that and we'll respond soon.

predic8 commented 3 months ago

@paulhyo there is already a fix for that in the main branch. Next couple of hours there will be a release of the 5.5.4 with the fix in it.