1

I'm trying to generate a Client with swagger. I have a yaml file that have references to another yaml files. All these files are in the same directory. The problem is that part of references are resolved, but part of them are not.

For example, in my yaml file there 2 objects with the same reference:

$ref: TS29571_CommonData.yaml#/components/schemas/Snssai

In TS29571_CommonData.yaml it looks like:

Snssai:
  type: object
  properties:
    sst:
      type: integer
      minimum: 0
      maximum: 255
    sd:
      type: string
      pattern: '^[A-Fa-f0-9]{6}$'
  required:
    - sst

In one generated file it's resolved, there is correct import import generated.model.Snssai; and correct usage of this object. But in another file it looks like import generated.model.TS29571CommonDataYamlcomponentsschemasSnssai; and its red.

This is my pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>SwaggerMultipleYaml</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>SwaggerMultipleYaml</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.swagger.core.v3</groupId>
            <artifactId>swagger-annotations</artifactId>
            <version>2.1.4</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>6.0.10.Final</version>
        </dependency>

        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
        </dependency>
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>4.9.1</version>
        </dependency>
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>logging-interceptor</artifactId>
            <version>4.9.1</version>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.1</version>
        </dependency>
        <dependency>
            <groupId>io.gsonfire</groupId>
            <artifactId>gson-fire</artifactId>
            <version>1.8.3</version>
        </dependency>

        <dependency>
            <groupId>org.threeten</groupId>
            <artifactId>threetenbp</artifactId>
            <version>0.7.2</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${project.parent.version}</version>
            </plugin>

            <plugin>
                <groupId>io.swagger.codegen.v3</groupId>
                <artifactId>swagger-codegen-maven-plugin</artifactId>
                <version>3.0.25</version>
                <executions>
                    <execution>
                        <id>c</id>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <inputSpec>${project.basedir}/src/main/resources/specs/TS29508_Nsmf_EventExposure.yaml</inputSpec>
                            <language>java</language>
                            <modelPackage>generated.model</modelPackage>
                            <apiPackage>generated.api</apiPackage>
                            <invokerPackage>generated.invoker</invokerPackage>
                            <configOptions>
                                <groupId>${project.groupId}</groupId>
                                <artifactId>${project.artifactId}</artifactId>
                                <artifactVersion>${project.version}</artifactVersion>
                                <library>okhttp-gson</library>
                            </configOptions>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

What could be a reason?

Igor_M
  • 308
  • 2
  • 12

1 Answers1

0

There were 2 problems.

  1. The problem was in okhttp. Swagger use okhttp to generate a client, and in pom.xml file I added dependency for okhttp3. So in generated files compiler could not resolve import com.squareup.okhttp.OkHttpClient; and that gave me error in the middle of build process. I changed

     <dependency>
         <groupId>com.squareup.okhttp3</groupId>
         <artifactId>okhttp</artifactId>
         <version>4.9.1</version>
     </dependency>
     <dependency>
         <groupId>com.squareup.okhttp3</groupId>
         <artifactId>logging-interceptor</artifactId>
         <version>4.9.1</version>
     </dependency>
    

to

    <dependency>
        <groupId>com.squareup.okhttp</groupId>
        <artifactId>okhttp</artifactId>
        <version>2.7.5</version>
    </dependency>
    <dependency>
        <groupId>com.squareup.okhttp</groupId>
        <artifactId>logging-interceptor</artifactId>
        <version>2.7.5</version>
    </dependency>
  1. Some of yaml files had references to another, another files had references to more files and so on. So I loaded all yaml files, even those that I didn't need explicitly.
Igor_M
  • 308
  • 2
  • 12