2017-12-12 9 views
0

Ich habe die folgenden zwei Entitätsklassen.Swagger, der ApiModel- und ApiModelProperty-Annotationen in Entitätsklassen nicht scannt, die sich in einer anderen JAR-Datei befinden

Die erste Klasse ist SampleApiEntity:

package my.company.rest; 

import io.swagger.annotations.ApiModel; 
import io.swagger.annotations.ApiModelProperty; 
import org.hibernate.annotations.Type; 
import java.io.Serializable; 
import java.sql.Timestamp; 
import java.util.UUID; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.Id; 

@ApiModel (
    value  = "SampleApiEntity", 
    description = "This is a sample entity from the Api package." 
) 
@Entity 
public class SampleApiEntity 
     implements Serializable 
{ 
    public SampleApiEntity() {} 

    private static final long serialVersionUID = 1L; 

    @Column (nullable = false) 
    @ApiModelProperty (
     value = "level", 
     required = true 
    ) 
    private Integer level; 

    @Column (length = 255) 
    @ApiModelProperty (
     value = "description" 
    ) 
    private String description; 

    @Column (nullable = false) 
    @ApiModelProperty (
     value = "time", 
     required = true 
    ) 
    private Timestamp time; 

    @Id 
    @Column (
     unique = true, 
     nullable = false 
    ) 
    @Type (type = "pg-uuid") 
    @ApiModelProperty (
     value = "id", 
     readOnly = true, 
     dataType = "uuid", 
     example = "123e4567-e89b-12d3-a456-426655440000" 
    ) 
    private UUID  sampleApiEntityId; 

    public String getDescription() 
    { 
     return this.description; 
    } 

    public Integer getLevel() 
    { 
     return this.level; 
    } 

    public UUID getSampleApiEntityId() 
    { 
     return this.sampleApiEntityId; 
    } 

    public Timestamp getTime() 
    { 
     return this.time; 
    } 

    public void setDescription (String description) 
    { 
     this.description = description; 
    } 

    public void setLevel (Integer level) 
    { 
     this.level = level; 
    } 

    public void setSampleApiEntityId (UUID sampleApiEntityId) 
    { 
     this.sampleApiEntityId = sampleApiEntityId; 
    } 

    public void setTime (Timestamp time) 
    { 
     this.time = time; 
    } 
} 

Die zweite Klasse ist SampleModelEntity:

package my.company.model; 

import io.swagger.annotations.ApiModel; 
import io.swagger.annotations.ApiModelProperty; 
import org.hibernate.annotations.Type; 
import java.io.Serializable; 
import java.sql.Timestamp; 
import java.util.UUID; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.Id; 

@ApiModel (
    value  = "SampleModelEntity", 
    description = "This is a sample entity from the Model package." 
) 
@Entity 
public class SampleModelEntity 
     implements Serializable 
{ 
    public SampleModelEntity() {} 

    private static final long serialVersionUID = 1L; 

    @Column (nullable = false) 
    @ApiModelProperty (
     value = "level", 
     required = true 
    ) 
    private Integer level; 

    @Column (length = 255) 
    @ApiModelProperty (
     value = "description" 
    ) 
    private String description; 

    @Column (nullable = false) 
    @ApiModelProperty (
     value = "time", 
     required = true 
    ) 
    private Timestamp time; 

    @Id 
    @Column (
     unique = true, 
     nullable = false 
    ) 
    @Type (type = "pg-uuid") 
    @ApiModelProperty (
     value = "id", 
     readOnly = true, 
     example = "123e4567-e89b-12d3-a456-426655440000" 
    ) 
    private UUID  sampleModelEntityId; 

    public String getDescription() 
    { 
     return this.description; 
    } 

    public Integer getLevel() 
    { 
     return this.level; 
    } 

    public UUID getSampleModelEntityId() 
    { 
     return this.sampleModelEntityId; 
    } 

    public Timestamp getTime() 
    { 
     return this.time; 
    } 

    public void setDescription (String description) 
    { 
     this.description = description; 
    } 

    public void setLevel (Integer level) 
    { 
     this.level = level; 
    } 

    public void setSampleModelEntityId (UUID sampleModelEntityId) 
    { 
     this.sampleModelEntityId = sampleModelEntityId; 
    } 

    public void setTime (Timestamp time) 
    { 
     this.time = time; 
    } 
} 

Der einzige Unterschied zwischen den beiden Klassen ist, dass sie in separaten JAR-Dateien definiert sind. SampleApiEntity ist in der gleichen JAR wie die REST-Ressourcenklasse verpackt. SampleModelEntity ist in einer separaten JAR mit anderen Entitätsklassen verpackt. Die swagger.yaml-Datei, die generiert wird, enthält beide Klassen, jedoch fehlen Informationen, die von den ApiModel und ApiModelProperty Anmerkungen für die Klasse SampleModelEntity bereitgestellt werden.

Hier ist, was ich in der generierten swagger.yaml Datei sehe:

SampleApiEntity: 
    type: "object" 
    required: 
    - "level" 
    - "time" 
    properties: 
    level: 
     type: "integer" 
     format: "int32" 
     description: "level" 
    description: 
     type: "string" 
     description: "description" 
    time: 
     type: "string" 
     format: "date-time" 
     description: "time" 
    sampleApiEntityId: 
     type: "string" 
     format: "uuid" 
     example: "123e4567-e89b-12d3-a456-426655440000" 
     description: "id" 
     readOnly: true 
    description: "This is a sample entity from the Api package." 
SampleModelEntity: 
    type: "object" 
    properties: 
    level: 
     type: "integer" 
     format: "int32" 
    description: 
     type: "string" 
    time: 
     type: "string" 
     format: "date-time" 
    sampleModelEntityId: 
     type: "string" 
     format: "uuid" 

Kann jemand mir helfen zu verstehen, warum die ApiModel und ApiModelProperty Anmerkungen nicht ausgegeben in swagger.yaml Erzeugen?

+0

Ich habe einige der Forschung getan, und ich habe die engt Problem. Das Problem scheint nicht einfach durch die Tatsache verursacht zu sein, dass die 'SampleModelEntity'-Klasse in einem separaten JAR aus den REST-Ressourcenklassen gepackt ist. In der Datei pom.xml für das REST-Ressourcenpaket wird die Abhängigkeits-JAR, die 'SampleModelEntity' enthält, mit dem Geltungsbereich' bereitgestellte' deklariert. Der Bereich scheint das Problem zu verursachen. –

Antwort

0

Ich fand die Lösung. Es stellte sich heraus, dass es sich um ein Problem beim Laden von Klassen handelte. Ich hatte eine ear-Bibliothek, die ich verwendet habe, um eine war-Bibliothek bereitzustellen. Sowohl die war als auch die ear enthielten eine Kopie des Swagger-Annotations-Artefakts. Dies führte dazu, dass geladene Annotation-Klassen sich von denen unterscheiden, die in der ear verpackt wurden.

Ich löste das Problem, indem ich meine pom.xml Datei für die war Bibliothek änderte. Ich fügte hinzu, die Prahlerei-Anmerkungen als explizite Abhängigkeit, und legen Sie den Umfang als provided:

<dependency> 
     <groupId>io.swagger</groupId> 
     <artifactId>swagger-annotations</artifactId> 
     <version>1.5.10</version> 
     <scope>provided</scope> 
    </dependency> 

Sie hier weitere Informationen finden Sie unter: https://github.com/swagger-api/swagger-core/issues/2582

Verwandte Themen