Error generating OpenAPI from Camel Rest DSL

177 Views Asked by At

We recently upgraded apache camel from 3.x to 4.x. Since then swagger has stopped working. Please see attached image of swagger ui.

swagger ui localhost

We get the following warning while starting the application.

2024-01-11T13:17:36,363 WARN [main] o.a.c.s.s.SpringdocAutoConfiguration$1: Error generating OpenAPI from Camel Rest DSL due to: Cannot invoke "java.util.Map.clear()" because the return value of "io.swagger.v3.oas.models.media.Schema.getExtensions()" is null. This exception is ignored. java.lang.NullPointerException: Cannot invoke "java.util.Map.clear()" because the return value of "io.swagger.v3.oas.models.media.Schema.getExtensions()" is null at org.apache.camel.openapi.OpenApiHelper.clearVendorExtensions(OpenApiHelper.java:59) ~[camel-openapi-java-4.0.2.jar:4.0.2] at org.apache.camel.springboot.springdoc.SpringdocAutoConfiguration.createOpenAPI(SpringdocAutoConfiguration.java:131) ~[camel-springdoc-starter-4.0.2.jar:4.0.2] at org.apache.camel.springboot.springdoc.SpringdocAutoConfiguration$1.beforeApplicationStart(SpringdocAutoConfiguration.java:81) [camel-springdoc-starter-4.0.2.jar:4.0.2] at org.apache.camel.spring.boot.CamelSpringBootApplicationListener.onApplicationEvent(CamelSpringBootApplicationListener.java:111) [camel-spring-boot-4.0.2.jar:4.0.2] at org.apache.camel.spring.boot.CamelSpringBootApplicationListener.onApplicationEvent(CamelSpringBootApplicationListener.java:59) [camel-spring-boot-4.0.2.jar:4.0.2]

application.properties has exposed urls -

  1. app.context.profile.post=/v1/iwx/cj/gateway/profileattachments
  2. app.context.activity.post=/v1/iwx/cj/gateway/activity/status

We have following camel dependencies in pom.xml

<dependency>
    <groupId>org.apache.camel.springboot</groupId>
    <artifactId>camel-spring-boot-starter</artifactId>
    <version>${camel.version}</version>
    <exclusions>
        <exclusion>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-to-slf4j</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-spring-rabbitmq</artifactId>
    <version>${camel.version}</version>
</dependency>

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-test-junit5</artifactId>
    <version>${camel.version}</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.apache.camel.springboot</groupId>
    <artifactId>camel-servlet-starter</artifactId>
    <version>${camel.version}</version>
</dependency>

<dependency>
    <groupId>org.apache.camel.springboot</groupId>
    <artifactId>camel-jackson-starter</artifactId>
    <version>${camel.version}</version>
</dependency>

<!-- for Swagger-->
<dependency>
    <groupId>org.apache.camel.springboot</groupId>
    <artifactId>camel-springdoc-starter</artifactId>
    <version>${camel.version}</version>
</dependency>

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-http</artifactId>
    <version>${camel.version}</version>
</dependency>

<dependency>
    <groupId>org.apache.camel.springboot</groupId>
    <artifactId>camel-cxf-soap-starter</artifactId>
    <version>4.0.2</version>
    <exclusions>
        <exclusion>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.apache.camel.springboot</groupId>
    <artifactId>camel-cxf-rest-starter</artifactId>
    <version>4.0.2</version>
    <exclusions>
        <exclusion>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-core</artifactId>
    <version>4.0.2</version>
</dependency>

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <version>${cxfcodegen.version}</version>
    <exclusions>
        <exclusion>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-compress</artifactId>
        </exclusion>
        <exclusion>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>org.apache.camel.springboot</groupId>
    <artifactId>camel-resilience4j-starter</artifactId>
    <version>${camel.version}</version>
</dependency>


<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
    <version>2.3.0</version>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
</dependency>
<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-ui</artifactId>
    <version>1.6.8</version>
</dependency>
<plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <version>${cxfcodegen.version}</version>
    <executions>
        <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <configuration>
                <defaultOptions>
                    <autoNameResolution>true</autoNameResolution>
                </defaultOptions>
                <wsdlOptions>
                    <wsdlOption>
                        <wsdl>src/main/resources/wsdl/TransactionLookupService.wsdl</wsdl>
                    </wsdlOption>
                    <wsdlOption>
                        <wsdl>src/main/resources/wsdl/CTMService.wsdl</wsdl>
                    </wsdlOption>
                </wsdlOptions>
            </configuration>
            <goals>
                <goal>wsdl2java</goal>
            </goals>
        </execution>
    </executions>
</plugin>
1

There are 1 best solutions below

0
Claus Ibsen On

Okay I can see where the bug is and have created a ticket and a fix for next Camel releases https://issues.apache.org/jira/browse/CAMEL-20342