Генератор Openapi не генерирует аннотации @ XmlAttribute / @ XmlElement - PullRequest
0 голосов
/ 12 марта 2019

Сейчас я возился с openapi и пытаюсь создать конечную точку, которая использует файл XML. Однако при создании моделей с помощью openapi все аннотации XML, к которым я привык, отсутствуют. Это тот openapi.yaml, который я использую.

openapi: 3.0.1
info:
  version: "1.1"
  title: xml test
  description: some xml test

servers:
  - url: 'http://localhost/:8080'

paths:
  '/test':
    put:
      operationId: testMethodNaming
      requestBody: 
        content:
          'application/xml':
            schema:
              $ref: '#/components/schemas/MyRequest'
      responses:
        '200':
          description: 'OK'

components:
  schemas:
    MyRequest:
      type: object
      properties: 
        name:
          type: string
          xml: 
            attribute: true

Схема MyRequest сейчас является предметом обсуждения. Обратите внимание, что я объявляю свойство name как атрибут XML. Сгенерированный класс выглядит следующим образом:

/**
 * MyRequest
 */
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen", date = "2019-03-12T15:32:37.070386+01:00[Europe/Berlin]")

public class MyRequest   {
  @JsonProperty("name")
  private String name;

  public MyRequest name(String name) {
    this.name = name;
    return this;
  }

  /**
   * Get name
   * @return name
  */
  @ApiModelProperty(value = "")


  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }


  @Override
  public boolean equals(java.lang.Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    MyRequest myRequest = (MyRequest) o;
    return Objects.equals(this.name, myRequest.name);
  }

  @Override
  public int hashCode() {
    return Objects.hash(name);
  }

  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class MyRequest {\n");

    sb.append("    name: ").append(toIndentedString(name)).append("\n");
    sb.append("}");
    return sb.toString();
  }

  /**
   * Convert the given object to string with each line indented by 4 spaces
   * (except the first line).
   */
  private String toIndentedString(java.lang.Object o) {
    if (o == null) {
      return "null";
    }
    return o.toString().replace("\n", "\n    ");
  }
}

Я сгенерировал это с помощью генератора с пружинной загрузкой. Я ожидал, что над полем имени будет присутствовать аннотация @XmlAttribute. Я также ожидал, что в классе будет @XmlRootElement.

По какой-то причине я не могу запустить сгенерированный код прямо сейчас, но кажется, что если я отправлю <MyRequest name="foobar"> в конечную точку, он не сможет проанализировать его с этой моделью.

Я пропустил какой-либо параметр конфигурации или что-то еще, чтобы он генерировал правильные аннотации?

Глядя на исходный код openapi, есть необходимые аннотации

1 Ответ

0 голосов
/ 12 марта 2019

Что-то становится все более и более ясным для меня: сейчас генераторы OpenAPITools, а также его отец SwaggerCodeGen, имеют в качестве основного целевого формата json. Xml поддерживается true, но скорее как опция и, откровенно говоря, довольно плохо. Я недавно обнаружил 3 ошибки:

Чтобы все заработало, мне пришлось настроить различные шаблоны усов , чтобы иметь правильные xml-аннотации. Обходной путь описан в первом выпуске.

Важное замечание: также убедитесь, что опция withXml активирована, чтобы шаблон усов Pojo выдавал необходимые xml-аннотации.

Удачи.

...