Skip to content

Commit f579bd1

Browse files
committed
[cxf] add support for Swagger2
Closes #3668
1 parent 45add92 commit f579bd1

File tree

9 files changed

+161
-16
lines changed

9 files changed

+161
-16
lines changed

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaCXFClientCodegen.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
package org.openapitools.codegen.languages;
1919

2020
import io.swagger.v3.oas.models.Operation;
21+
import io.swagger.v3.oas.models.media.Schema;
2122
import org.openapitools.codegen.*;
2223
import org.openapitools.codegen.languages.features.BeanValidationFeatures;
2324
import org.openapitools.codegen.languages.features.GzipTestFeatures;
@@ -136,6 +137,20 @@ public String getName() {
136137
return "jaxrs-cxf-client";
137138
}
138139

140+
@Override
141+
public List<DocumentationProvider> supportedDocumentationProvider() {
142+
return List.of(DocumentationProvider.NONE, DocumentationProvider.SWAGGER1, DocumentationProvider.SWAGGER2);
143+
}
144+
145+
@Override
146+
public List<AnnotationLibrary> supportedAnnotationLibraries() {
147+
return List.of(AnnotationLibrary.NONE, AnnotationLibrary.SWAGGER1, AnnotationLibrary.SWAGGER2);
148+
}
149+
150+
@Override
151+
public DocumentationProvider defaultDocumentationProvider() {
152+
return DocumentationProvider.SWAGGER1;
153+
}
139154

140155
@Override
141156
public CodegenType getTag() {
@@ -148,15 +163,22 @@ public void addOperationToGroup(String tag, String resourcePath, Operation opera
148163
co.subresourceOperation = !co.path.isEmpty();
149164
}
150165

166+
@Override
167+
public CodegenModel fromModel(String name, Schema model) {
168+
CodegenModel m = super.fromModel(name, model);
169+
m.imports.remove("ApiModel");
170+
return m;
171+
}
172+
151173
@Override
152174
public void postProcessModelProperty(CodegenModel model, CodegenProperty property) {
153175
super.postProcessModelProperty(model, property);
154176
model.imports.remove("ApiModelProperty");
155177
model.imports.remove("ApiModel");
156178
model.imports.remove("JsonSerialize");
179+
model.imports.remove("JsonTypeName");
157180
model.imports.remove("ToStringSerializer");
158181

159-
160182
if (useJackson) {
161183
//Add jackson imports when model has inner enum
162184
if (Boolean.FALSE.equals(model.isEnum) && Boolean.TRUE.equals(model.hasEnums)) {

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaCXFServerCodegen.java

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
package org.openapitools.codegen.languages;
1919

20-
import io.swagger.v3.oas.models.media.ComposedSchema;
2120
import io.swagger.v3.oas.models.media.Schema;
2221
import org.openapitools.codegen.*;
2322
import org.openapitools.codegen.languages.features.CXFServerFeatures;
@@ -26,7 +25,6 @@
2625
import org.openapitools.codegen.languages.features.UseGenericResponseFeatures;
2726
import org.openapitools.codegen.model.ModelMap;
2827
import org.openapitools.codegen.model.OperationsMap;
29-
import org.openapitools.codegen.utils.ModelUtils;
3028
import org.slf4j.Logger;
3129
import org.slf4j.LoggerFactory;
3230

@@ -247,12 +245,35 @@ public String getName() {
247245
return "jaxrs-cxf";
248246
}
249247

248+
@Override
249+
public List<DocumentationProvider> supportedDocumentationProvider() {
250+
return List.of(DocumentationProvider.NONE, DocumentationProvider.SWAGGER1, DocumentationProvider.SWAGGER2);
251+
}
252+
253+
@Override
254+
public List<AnnotationLibrary> supportedAnnotationLibraries() {
255+
return List.of(AnnotationLibrary.NONE, AnnotationLibrary.SWAGGER1, AnnotationLibrary.SWAGGER2);
256+
}
257+
258+
@Override
259+
public DocumentationProvider defaultDocumentationProvider() {
260+
return DocumentationProvider.SWAGGER1;
261+
}
262+
263+
@Override
264+
public CodegenModel fromModel(String name, Schema model) {
265+
CodegenModel m = super.fromModel(name, model);
266+
m.imports.remove("ApiModel");
267+
return m;
268+
}
269+
250270
@Override
251271
public void postProcessModelProperty(CodegenModel model, CodegenProperty property) {
252272
super.postProcessModelProperty(model, property);
253273
model.imports.remove("ApiModelProperty");
254274
model.imports.remove("ApiModel");
255275
model.imports.remove("JsonSerialize");
276+
model.imports.remove("JsonTypeName");
256277
model.imports.remove("ToStringSerializer");
257278

258279
//Add imports for Jackson when model has inner enum

modules/openapi-generator/src/main/resources/JavaJaxRS/cxf/api.mustache

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,42 @@ package {{package}};
33
{{#imports}}import {{import}};
44
{{/imports}}
55

6+
{{#useAbstractionForFiles}}
67
import java.io.InputStream;
7-
import java.io.OutputStream;
8+
{{/useAbstractionForFiles}}
89
import java.util.List;
910
import java.util.Map;
1011
import {{javaxPackage}}.ws.rs.*;
12+
{{#useGenericResponse}}
1113
import {{javaxPackage}}.ws.rs.core.Response;
14+
{{/useGenericResponse}}
15+
{{#addConsumesProducesJson}}
1216
import {{javaxPackage}}.ws.rs.core.MediaType;
17+
{{/addConsumesProducesJson}}
1318
import org.apache.cxf.jaxrs.ext.multipart.*;
1419

20+
{{#swagger1AnnotationLibrary}}
1521
import io.swagger.annotations.Api;
1622
import io.swagger.annotations.ApiOperation;
1723
import io.swagger.annotations.ApiResponses;
1824
import io.swagger.annotations.ApiResponse;
1925
import io.swagger.jaxrs.PATCH;
26+
{{/swagger1AnnotationLibrary}}
27+
{{#swagger2AnnotationLibrary}}
28+
import io.swagger.v3.oas.annotations.OpenAPIDefinition;
29+
import io.swagger.v3.oas.annotations.Operation;
30+
{{#implicitHeadersParams.0}}
31+
import io.swagger.v3.oas.annotations.Parameter;
32+
import io.swagger.v3.oas.annotations.Parameters;
33+
import io.swagger.v3.oas.annotations.enums.ParameterIn;
34+
{{/implicitHeadersParams.0}}
35+
import io.swagger.v3.oas.annotations.info.Info;
36+
import io.swagger.v3.oas.annotations.media.ArraySchema;
37+
import io.swagger.v3.oas.annotations.media.Content;
38+
import io.swagger.v3.oas.annotations.media.Schema;
39+
import io.swagger.v3.oas.annotations.responses.ApiResponse;
40+
import io.swagger.v3.oas.annotations.responses.ApiResponses;
41+
{{/swagger2AnnotationLibrary}}
2042
{{#useBeanValidation}}
2143
import {{javaxPackage}}.validation.constraints.*;
2244
import {{javaxPackage}}.validation.Valid;
@@ -33,7 +55,18 @@ import {{javaxPackage}}.validation.Valid;
3355
*/
3456
{{/appName}}
3557
@Path("{{#useAnnotatedBasePath}}{{contextPath}}{{/useAnnotatedBasePath}}{{commonPath}}")
58+
{{#swagger1AnnotationLibrary}}
3659
@Api(value = "/", description = "{{description}}")
60+
{{/swagger1AnnotationLibrary}}
61+
{{#swagger2AnnotationLibrary}}
62+
@OpenAPIDefinition(
63+
info = @Info(
64+
{{#appName}}title = "{{{appName}}}",{{/appName}}
65+
{{#appDescription}}description = "{{{appDescription}}}",{{/appDescription}}
66+
version = "{{{appVersion}}}"
67+
)
68+
)
69+
{{/swagger2AnnotationLibrary}}
3770
{{#addConsumesProducesJson}}
3871
@Consumes(MediaType.APPLICATION_JSON)
3972
@Produces(MediaType.APPLICATION_JSON)
@@ -60,6 +93,7 @@ public interface {{classname}} {
6093
{{#hasProduces}}
6194
@Produces({ {{#produces}}"{{{mediaType}}}"{{^-last}}, {{/-last}}{{/produces}} })
6295
{{/hasProduces}}
96+
{{#swagger1AnnotationLibrary}}
6397
@ApiOperation(value = "{{{summary}}}", tags={ {{#vendorExtensions.x-tags}}"{{tag}}"{{^-last}}, {{/-last}}{{/vendorExtensions.x-tags}} })
6498
{{#implicitHeadersParams.0}}
6599
@io.swagger.annotations.ApiImplicitParams({
@@ -70,6 +104,19 @@ public interface {{classname}} {
70104
{{/implicitHeadersParams.0}}
71105
@ApiResponses(value = { {{#responses}}
72106
@ApiResponse(code = {{{code}}}, message = "{{{message}}}"{{^vendorExtensions.x-java-is-response-void}}, response = {{#isFile}}{{#useAbstractionForFiles}}InputStream{{/useAbstractionForFiles}}{{^useAbstractionForFiles}}{{{baseType}}}{{/useAbstractionForFiles}}{{/isFile}}{{^isFile}}{{{baseType}}}{{/isFile}}.class{{#containerType}}, responseContainer = "{{{.}}}"{{/containerType}}{{/vendorExtensions.x-java-is-response-void}}){{^-last}},{{/-last}}{{/responses}} })
107+
{{/swagger1AnnotationLibrary}}
108+
{{#swagger2AnnotationLibrary}}
109+
@Operation(operationId = "{{{operationIdOriginal}}}"{{#summary}}, summary = "{{{.}}}"{{/summary}}, {{#isDeprecated}}deprecated = true, {{/isDeprecated}} tags={ {{#vendorExtensions.x-tags}}"{{tag}}"{{^-last}}, {{/-last}}{{/vendorExtensions.x-tags}} })
110+
@ApiResponses(value = { {{#responses}}
111+
@ApiResponse(responseCode = "{{{code}}}", description = "{{{message}}}"{{^vendorExtensions.x-java-is-response-void}}, content = @Content({{#containerType}}array = @ArraySchema({{/containerType}}schema = @Schema(implementation = {{#isFile}}{{#useAbstractionForFiles}}InputStream{{/useAbstractionForFiles}}{{^useAbstractionForFiles}}{{{baseType}}}{{/useAbstractionForFiles}}{{/isFile}}{{^isFile}}{{{baseType}}}{{/isFile}}.class){{#containerType}}){{/containerType}}){{/vendorExtensions.x-java-is-response-void}}){{^-last}},{{/-last}}{{/responses}} })
112+
{{#implicitHeadersParams.0}}
113+
@Parameters({
114+
{{#implicitHeadersParams}}
115+
{{>paramDoc}}{{^-last}},{{/-last}}
116+
{{/implicitHeadersParams}}
117+
})
118+
{{/implicitHeadersParams.0}}
119+
{{/swagger2AnnotationLibrary}}
73120
public {{>returnTypes}} {{nickname}}({{#allParams}}{{>queryParams}}{{>pathParams}}{{>headerParams}}{{>bodyParams}}{{>formParams}}{{^-last}}, {{/-last}}{{/allParams}});
74121
{{/operation}}
75122
}

modules/openapi-generator/src/main/resources/JavaJaxRS/cxf/apiServiceImpl.mustache

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import org.apache.cxf.jaxrs.model.wadl.DocTarget;
1515

1616
import org.apache.cxf.jaxrs.ext.multipart.*;
1717

18-
import io.swagger.annotations.Api;
1918
{{#useSpringAnnotationConfig}}
2019
import org.springframework.stereotype.Service;
2120
{{/useSpringAnnotationConfig}}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
@Parameter(name = "{{{baseName}}}"{{#isDeprecated}}, deprecated = true{{/isDeprecated}}, description = "{{{description}}}"{{#required}}, required = true{{/required}}{{#isPathParam}}, in = ParameterIn.PATH{{/isPathParam}}{{#isQueryParam}}, in = ParameterIn.QUERY{{/isQueryParam}}{{#isCookieParam}}, in = ParameterIn.COOKIE{{/isCookieParam}}{{#isHeaderParam}}, in = ParameterIn.HEADER{{/isHeaderParam}})

modules/openapi-generator/src/main/resources/JavaJaxRS/cxf/pojo.mustache

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
1+
{{#swagger1AnnotationLibrary}}
2+
{{#description}}
3+
import io.swagger.annotations.ApiModel;
4+
{{/description}}
15
import io.swagger.annotations.ApiModelProperty;
6+
{{/swagger1AnnotationLibrary}}
7+
{{#swagger2AnnotationLibrary}}
8+
import io.swagger.v3.oas.annotations.media.Schema;
9+
{{/swagger2AnnotationLibrary}}
210
import java.util.Objects;
311
{{#withXml}}
412
import {{javaxPackage}}.xml.bind.annotation.XmlElement;
@@ -13,9 +21,14 @@ import com.fasterxml.jackson.annotation.JsonProperty;
1321

1422
{{#description}}
1523
/**
16-
* {{{description}}}
17-
**/
24+
* {{{description}}}
25+
*/
26+
{{#swagger1AnnotationLibrary}}
1827
@ApiModel(description="{{{description}}}")
28+
{{/swagger1AnnotationLibrary}}
29+
{{#swagger2AnnotationLibrary}}
30+
@Schema(description="{{{description}}}")
31+
{{/swagger2AnnotationLibrary}}
1932
{{/description}}
2033
{{>additionalModelTypeAnnotations}}{{>xmlPojoAnnotation}}{{#discriminator}}{{>typeInfoAnnotation}}{{/discriminator}}
2134
{{#vendorExtensions.x-class-extra-annotation}}
@@ -25,16 +38,23 @@ public class {{classname}} {{#parent}}extends {{{.}}}{{/parent}}{{#vendorExtensi
2538
{{#vars}}{{#isEnum}}{{^isContainer}}
2639
{{>enumClass}}{{/isContainer}}{{#isContainer}}{{#mostInnerItems}}
2740
{{>enumClass}}{{/mostInnerItems}}{{/isContainer}}{{/isEnum}}
28-
{{#withXml}}
29-
@XmlElement(name="{{baseName}}"{{#required}}, required = {{required}}{{/required}})
30-
{{/withXml}}
31-
@ApiModelProperty({{#example}}example = "{{{.}}}", {{/example}}{{#required}}required = {{required}}, {{/required}}value = "{{{description}}}"){{^isPrimitiveType}}{{^isDate}}{{^isDateTime}}{{^isString}}{{^isFile}}{{#useBeanValidation}}
32-
@Valid{{/useBeanValidation}}{{/isFile}}{{/isString}}{{/isDateTime}}{{/isDate}}{{/isPrimitiveType}}
3341
{{#description}}
3442
/**
35-
* {{{.}}}
36-
**/
43+
* {{{.}}}
44+
*/
3745
{{/description}}
46+
{{#withXml}}
47+
@XmlElement(name="{{baseName}}"{{#required}}, required = {{required}}{{/required}})
48+
{{/withXml}}
49+
{{#swagger1AnnotationLibrary}}
50+
@ApiModelProperty({{#example}}example = "{{{.}}}", {{/example}}{{#required}}required = {{required}}, {{/required}}value = "{{{description}}}")
51+
{{/swagger1AnnotationLibrary}}
52+
{{#swagger2AnnotationLibrary}}
53+
@Schema(description = "{{{description}}}"{{#example}}, example = "{{{example}}}"{{/example}}{{#required}}, requiredMode = Schema.RequiredMode.REQUIRED{{/required}})
54+
{{/swagger2AnnotationLibrary}}
55+
{{^isPrimitiveType}}{{^isDate}}{{^isDateTime}}{{^isString}}{{^isFile}}{{#useBeanValidation}}
56+
@Valid
57+
{{/useBeanValidation}}{{/isFile}}{{/isString}}{{/isDateTime}}{{/isDate}}{{/isPrimitiveType}}
3858
{{#vendorExtensions.x-field-extra-annotation}}
3959
{{{vendorExtensions.x-field-extra-annotation}}}
4060
{{/vendorExtensions.x-field-extra-annotation}}

modules/openapi-generator/src/main/resources/JavaJaxRS/cxf/pom.mustache

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@
100100
</plugins>
101101
</build>
102102
<dependencies>
103+
{{#swagger1AnnotationLibrary}}
103104
<dependency>
104105
<groupId>io.swagger</groupId>
105106
<artifactId>swagger-jaxrs</artifactId>
@@ -114,6 +115,14 @@ for this project used jakarta.validation-api -->
114115
</exclusion>
115116
</exclusions>
116117
</dependency>
118+
{{/swagger1AnnotationLibrary}}
119+
{{#swagger2AnnotationLibrary}}
120+
<dependency>
121+
<groupId>io.swagger.core.v3</groupId>
122+
<artifactId>swagger-annotations</artifactId>
123+
<version>${swagger-annotations-version}</version>
124+
</dependency>
125+
{{/swagger2AnnotationLibrary}}
117126
<dependency>
118127
<groupId>ch.qos.logback</groupId>
119128
<artifactId>logback-classic</artifactId>
@@ -217,7 +226,12 @@ for this project used jakarta.validation-api -->
217226
<java.version>1.8</java.version>
218227
<maven.compiler.source>${java.version}</maven.compiler.source>
219228
<maven.compiler.target>${java.version}</maven.compiler.target>
220-
<swagger-core-version>1.5.18</swagger-core-version>
229+
{{#swagger1AnnotationLibrary}}
230+
<swagger-core-version>1.6.6</swagger-core-version>
231+
{{/swagger1AnnotationLibrary}}
232+
{{#swagger2AnnotationLibrary}}
233+
<swagger-annotations-version>2.2.7</swagger-annotations-version>
234+
{{/swagger2AnnotationLibrary}}
221235
<jetty-version>9.2.9.v20150224</jetty-version>
222236
<junit-version>4.13.2</junit-version>
223237
<logback-version>1.4.14</logback-version>

modules/openapi-generator/src/main/resources/JavaJaxRS/cxf/server/ApplicationContext.xml.mustache

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
{{/useSpringAnnotationConfig}}
3535

3636
{{#useSwaggerFeature}}
37+
{{#swagger1AnnotationLibrary}}
3738
<!-- CXF Swagger2Feature -->
3839
{{! http://cxf.apache.org/docs/swagger2feature.html }}
3940
<bean id="swagger2Feature" class="org.apache.cxf.jaxrs.swagger.Swagger2Feature">
@@ -48,6 +49,7 @@
4849
<property name="license" value="${swagger.license}" />
4950
<property name="licenseUrl" value="${swagger.licenseUrl}" /-->
5051
</bean>
52+
{{/swagger1AnnotationLibrary}}
5153
{{/useSwaggerFeature}}
5254

5355
<cxf:bus>

modules/openapi-generator/src/main/resources/JavaJaxRS/cxf/server/pom.mustache

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@
109109
</plugins>
110110
</build>
111111
<dependencies>
112+
{{#swagger1AnnotationLibrary}}
112113
<dependency>
113114
<groupId>io.swagger</groupId>
114115
<artifactId>swagger-jaxrs</artifactId>
@@ -123,6 +124,14 @@ for this project used jakarta.validation-api -->
123124
</exclusion>
124125
</exclusions>
125126
</dependency>
127+
{{/swagger1AnnotationLibrary}}
128+
{{#swagger2AnnotationLibrary}}
129+
<dependency>
130+
<groupId>io.swagger.core.v3</groupId>
131+
<artifactId>swagger-annotations</artifactId>
132+
<version>${swagger-annotations-version}</version>
133+
</dependency>
134+
{{/swagger2AnnotationLibrary}}
126135
<dependency>
127136
<groupId>ch.qos.logback</groupId>
128137
<artifactId>logback-classic</artifactId>
@@ -173,7 +182,12 @@ for this project used jakarta.validation-api -->
173182
</dependency>
174183
<dependency>
175184
<groupId>org.apache.cxf</groupId>
185+
{{#swagger1AnnotationLibrary}}
176186
<artifactId>cxf-rt-rs-service-description-swagger</artifactId>
187+
{{/swagger1AnnotationLibrary}}
188+
{{#swagger2AnnotationLibrary}}
189+
<artifactId>cxf-rt-rs-service-description-openapi-v3</artifactId>
190+
{{/swagger2AnnotationLibrary}}
177191
<version>${cxf-version}</version>
178192
<scope>compile</scope>
179193
</dependency>
@@ -268,7 +282,12 @@ for this project used jakarta.validation-api -->
268282
<java.version>1.8</java.version>
269283
<maven.compiler.source>${java.version}</maven.compiler.source>
270284
<maven.compiler.target>${java.version}</maven.compiler.target>
271-
<swagger-core-version>1.5.22</swagger-core-version>
285+
{{#swagger1AnnotationLibrary}}
286+
<swagger-core-version>1.6.6</swagger-core-version>
287+
{{/swagger1AnnotationLibrary}}
288+
{{#swagger2AnnotationLibrary}}
289+
<swagger-annotations-version>2.2.7</swagger-annotations-version>
290+
{{/swagger2AnnotationLibrary}}
272291
<jetty-version>9.2.9.v20150224</jetty-version>
273292
<junit-version>4.13.2</junit-version>
274293
<logback-version>1.4.14</logback-version>

0 commit comments

Comments
 (0)