Skip to content

[BUG]Openapi generator does not generate @XmlAttribute/@XmlElement annotations #5764

@vmisra2018

Description

@vmisra2018
Description

Trying to generate spring resttemplate client which comsumes applicaiton/xml but outputs json. I am expecting models to have @XmlAttribute/@xmlelement annotations but all it genrates is json. I have withXML as true in config of plugin.

openapi-generator version

4.3.1-SNAPSHOT
YAML

https://github.com/OpenAPITools/openapi-generator/blob/master/modules/openapi-generator-maven-plugin/examples/swagger.yaml

POM

<?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.2.6.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>
  <groupId>com.example</groupId>
  <artifactId>hello</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>hello</name>
  <description>Demo project for Spring Boot</description>


  <build>
    <plugins>
      <!-- activate the plugin -->
      <plugin>
        <groupId>org.openapitools</groupId>
        <artifactId>openapi-generator-maven-plugin</artifactId>
        <!-- RELEASE_VERSION -->
        <version>4.3.1-SNAPSHOT</version>
        <!-- /RELEASE_VERSION -->
        <executions>
          <execution>
            <id>default</id>
            <goals>
              <goal>generate</goal>
            </goals>
            <configuration>
              <!-- specify the swagger yaml -->
              <inputSpec>${project.basedir}/swagger.yaml</inputSpec>

              <!-- target to generate java client code -->
              <generatorName>java</generatorName>

              <!-- hint: if you want to generate java server code, e.g. based on Spring Boot,
                   you can use the following target: <generatorName>spring</generatorName> -->

              <!-- pass any necessary config options -->
              <configOptions>
                <dateLibrary>joda</dateLibrary>
              </configOptions>

              <!-- override the default library to jersey2 -->
              <library>resttemplate</library>
            </configuration>
          </execution>
          <execution>
            <id>remote</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>generate</goal>
            </goals>
            <configuration>
              <!-- specify the swagger yaml -->
              <inputSpec>https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/modules/openapi-generator/src/test/resources/2_0/petstore.yaml</inputSpec>

              <!-- target to generate java client code -->
              <generatorName>java</generatorName>

              <!-- hint: if you want to generate java server code, e.g. based on Spring Boot,
                   you can use the following target: <generatorName>spring</generatorName> -->

              <!-- pass any necessary config options -->
              <configOptions>
                <dateLibrary>joda</dateLibrary>
              </configOptions>

              <!-- override the default library to jersey2 -->
              <library>resttemplate</library>
              <withXml>true</withXml>

              <output>${project.build.directory}/generated-sources/remote-openapi</output>
              <apiPackage>remote.org.openapitools.client.api</apiPackage>
              <modelPackage>remote.org.openapitools.client.model</modelPackage>
              <invokerPackage>remote.org.openapitools.client</invokerPackage>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.1</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
          <proc>none</proc>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <pluginRepositories>
    <pluginRepository>
      <id>sonatype-snapshots</id>
      <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
    </pluginRepository>
  </pluginRepositories>
  <dependencies>
    <!-- dependencies are needed for the client being generated -->

    <dependency>
      <groupId>io.swagger</groupId>
      <artifactId>swagger-annotations</artifactId>
      <version>${swagger-annotations-version}</version>
    </dependency>

    <!-- You can find the dependencies for the library configuration you chose by looking in JavaClientCodegen.
         Then find the corresponding dependency on Maven Central, and set the versions in the property section below -->

    <!-- HTTP client: jersey-client -->
    <dependency>
      <groupId>org.glassfish.jersey.core</groupId>
      <artifactId>jersey-client</artifactId>
      <version>${jersey-version}</version>
    </dependency>

    <dependency>
      <artifactId>spring-boot-starter-web</artifactId>
      <groupId>org.springframework.boot</groupId>
    </dependency>


    <dependency>
      <groupId>org.glassfish.jersey.media</groupId>
      <artifactId>jersey-media-multipart</artifactId>
      <version>${jersey-version}</version>
    </dependency>
    <dependency>
      <groupId>org.glassfish.jersey.media</groupId>
      <artifactId>jersey-media-json-jackson</artifactId>
      <version>${jersey-version}</version>
      <exclusions>
        <exclusion>
          <artifactId>jackson-core</artifactId>
          <groupId>com.fasterxml.jackson.core</groupId>
        </exclusion>
        <exclusion>
          <artifactId>jackson-annotations</artifactId>
          <groupId>com.fasterxml.jackson.core</groupId>
        </exclusion>
      </exclusions>
    </dependency>

    <!-- @Nullable annotation -->
    <dependency>
      <groupId>com.google.code.findbugs</groupId>
      <artifactId>jsr305</artifactId>
      <version>3.0.2</version>
    </dependency>

    <dependency>
      <groupId>com.fasterxml.jackson.jaxrs</groupId>
      <artifactId>jackson-jaxrs-json-provider</artifactId>
      <version>${jackson-version}</version>
      <exclusions>
        <exclusion>
          <artifactId>jackson-core</artifactId>
          <groupId>com.fasterxml.jackson.core</groupId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.openapitools</groupId>
      <artifactId>jackson-databind-nullable</artifactId>
      <version>${jackson-databind-nullable-version}</version>
    </dependency>
  <dependency>
      <groupId>com.fasterxml.jackson.datatype</groupId>
      <artifactId>jackson-datatype-joda</artifactId>
      <version>${jackson-version}</version>
    <exclusions>
      <exclusion>
        <artifactId>joda-time</artifactId>
        <groupId>joda-time</groupId>
      </exclusion>
      <exclusion>
        <artifactId>jackson-core</artifactId>
        <groupId>com.fasterxml.jackson.core</groupId>
      </exclusion>
      <exclusion>
        <artifactId>jackson-annotations</artifactId>
        <groupId>com.fasterxml.jackson.core</groupId>
      </exclusion>
    </exclusions>
  </dependency>
    <dependency>
      <groupId>joda-time</groupId>
      <artifactId>joda-time</artifactId>
      <version>${jodatime-version}</version>
    </dependency>

    <!-- Base64 encoding that works in both JVM and Android -->
    <dependency>
      <groupId>com.brsanthu</groupId>
      <artifactId>migbase64</artifactId>
      <version>2.2</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
      <exclusions>
        <exclusion>
          <groupId>org.junit.vintage</groupId>
          <artifactId>junit-vintage-engine</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
  </dependencies>

  <properties>
    <swagger-annotations-version>1.5.8</swagger-annotations-version>
    <jersey-version>2.27</jersey-version>
    <jackson-version>2.8.9</jackson-version>
    <jackson-databind-nullable-version>0.2.0</jackson-databind-nullable-version>
    <jodatime-version>2.7</jodatime-version>
    <maven-plugin-version>1.0.0</maven-plugin-version>
    <junit-version>4.8.1</junit-version>
    <java.version>11</java.version>
  </properties>
</project>

Steps to reproduce

mvn clean install

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions