Skip to content
This repository was archived by the owner on Jan 11, 2019. It is now read-only.

Commit 9a7225d

Browse files
author
Ole Lensmar
committed
Merge pull request #34 from SmartBear/2.3.1
2.3.1
2 parents ab0043b + f2600b7 commit 9a7225d

13 files changed

+348
-102
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ Download and install via the Plugin Manager / Repository Browser from inside Rea
1010

1111
### Release History
1212

13+
* Feb 2016 - Version 2.3.0 - Creates sample messages for POST/PUT requests / responses, dependency updates, bugfixes
1314
* March 2015 - Version 2.1 - Bug-fix release which ties into the updated plugin system in Ready! API and adds dynamic swagger generation for REST Virts
1415
* September 2014 - Version 2.0 - Initial release for Ready! API with Swagger 2.0 support
1516

pom.xml

Lines changed: 47 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,31 @@
88

99
<groupId>com.smartbear</groupId>
1010
<artifactId>soapui-swagger-plugin</artifactId>
11-
<version>2.1</version>
11+
<version>2.3.1</version>
12+
13+
<name>Ready! API Swagger plugin</name>
14+
15+
<properties>
16+
<jackson-version>2.4.2</jackson-version>
17+
<swagger-version>1.5.8</swagger-version>
18+
<swagger-parser.version>1.0.19</swagger-parser.version>
19+
<swagger-inflector.version>1.0.6</swagger-inflector.version>
20+
</properties>
1221

1322
<repositories>
1423
<repository>
1524
<id>soapUI Repository</id>
1625
<url>http://www.soapui.org/repository/maven2</url>
26+
<snapshots>
27+
<enabled>false</enabled>
28+
</snapshots>
29+
</repository>
30+
<repository>
31+
<id>central</id>
32+
<url>http://repo1.maven.org/maven2</url>
33+
<snapshots>
34+
<enabled>false</enabled>
35+
</snapshots>
1736
</repository>
1837
</repositories>
1938

@@ -32,9 +51,15 @@
3251
</dependency>
3352

3453
<dependency>
35-
<groupId>com.smartbear</groupId>
54+
<groupId>com.smartbear</groupId>
3655
<artifactId>swagger4j</artifactId>
37-
<version>1.0-beta5</version>
56+
<version>1.0-beta6</version>
57+
</dependency>
58+
59+
<dependency>
60+
<groupId>io.swagger</groupId>
61+
<artifactId>swagger-inflector</artifactId>
62+
<version>${swagger-inflector.version}</version>
3863
</dependency>
3964

4065
<dependency>
@@ -43,35 +68,34 @@
4368
<version>1.5</version>
4469
</dependency>
4570

71+
<dependency>
72+
<groupId>org.apache.httpcomponents</groupId>
73+
<artifactId>httpcore</artifactId>
74+
<version>4.4.3</version>
75+
</dependency>
76+
4677
<dependency>
4778
<groupId>junit</groupId>
4879
<artifactId>junit</artifactId>
4980
<version>3.8.1</version>
5081
<scope>test</scope>
5182
</dependency>
5283

53-
5484
<dependency>
5585
<groupId>com.smartbear</groupId>
5686
<artifactId>ready-api-soapui-pro</artifactId>
57-
<version>1.2.0</version>
87+
<version>1.2.1</version>
5888
</dependency>
5989

6090
<dependency>
61-
<groupId>com.wordnik</groupId>
62-
<artifactId>swagger-models</artifactId>
63-
<version>${swagger-version}</version>
64-
</dependency>
65-
66-
<dependency>
67-
<groupId>com.wordnik</groupId>
91+
<groupId>io.swagger</groupId>
6892
<artifactId>swagger-core</artifactId>
6993
<version>${swagger-version}</version>
7094
</dependency>
7195

7296
<dependency>
73-
<groupId>com.wordnik</groupId>
74-
<artifactId>swagger-annotations</artifactId>
97+
<groupId>io.swagger</groupId>
98+
<artifactId>swagger-models</artifactId>
7599
<version>${swagger-version}</version>
76100
</dependency>
77101

@@ -84,7 +108,7 @@
84108
<dependency>
85109
<groupId>io.swagger</groupId>
86110
<artifactId>swagger-parser</artifactId>
87-
<version>1.0.0</version>
111+
<version>${swagger-parser.version}</version>
88112
</dependency>
89113

90114
<dependency>
@@ -106,6 +130,13 @@
106130
<version>${jackson-version}</version>
107131
</dependency>
108132

133+
<dependency>
134+
<groupId>org.yaml</groupId>
135+
<artifactId>snakeyaml</artifactId>
136+
<version>1.16</version>
137+
<scope>test</scope>
138+
</dependency>
139+
109140
</dependencies>
110141

111142
<build>
@@ -122,6 +153,7 @@
122153
<artifactId>gmaven-plugin</artifactId>
123154
<version>1.5</version>
124155
<configuration>
156+
<source>${project.basedir}/src/main/groovy</source>
125157
<providerSelection>1.8</providerSelection>
126158
</configuration>
127159
<executions>
@@ -149,10 +181,4 @@
149181
</plugins>
150182

151183
</build>
152-
<name>SoapUI Swagger plugin</name>
153-
154-
<properties>
155-
<jackson-version>2.4.2</jackson-version>
156-
<swagger-version>1.5.1-M1</swagger-version>
157-
</properties>
158184
</project>

src/assembly/dist-assembly.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414
<include>javax.json:javax.json-api</include>
1515
<include>commons-lang:commons-lang</include>
1616
<include>io.swagger:swagger-parser</include>
17-
<include>com.wordnik:swagger-models</include>
18-
<include>com.wordnik:swagger-core</include>
19-
<include>com.wordnik:swagger-annotations</include>
17+
<include>io.swagger:swagger-core</include>
18+
<include>io.swagger:swagger-models</include>
19+
<include>io.swagger:swagger-inflector</include>
2020
<include>com.fasterxml.jackson.core:jackson-annotations</include>
2121
<include>com.fasterxml.jackson.core:jackson-core</include>
2222
<include>com.fasterxml.jackson.core:jackson-databind</include>

src/main/groovy/com/smartbear/swagger/AddSwaggerAction.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ public void perform(final WsdlProject project, Object param) {
5454
if (dialog == null) {
5555
dialog = ADialogBuilder.buildDialog(Form.class);
5656
dialog.setValue(Form.TYPE, RESOURCE_LISTING_TYPE);
57+
dialog.setValue(Form.DEFAULTMEDIATYPE, SwaggerUtils.DEFAULT_MEDIA_TYPE);
5758
} else {
5859
dialog.setValue(Form.SWAGGERURL, "");
5960
}
@@ -71,7 +72,11 @@ public void perform(final WsdlProject project, Object param) {
7172
expUrl = new File(expUrl).toURI().toURL().toString();
7273
}
7374

74-
SwaggerImporter importer = SwaggerUtils.importSwaggerFromUrl(project, expUrl, dialog.getValue(Form.TYPE).equals(RESOURCE_LISTING_TYPE));
75+
SwaggerImporter importer = SwaggerUtils.importSwaggerFromUrl(
76+
project,
77+
expUrl,
78+
dialog.getValue(Form.TYPE).equals(RESOURCE_LISTING_TYPE),
79+
dialog.getValue(Form.DEFAULTMEDIATYPE));
7580
Analytics.trackAction("ImportSwagger", "Importer", importer.getClass().getSimpleName());
7681
break;
7782
}
@@ -81,12 +86,14 @@ public void perform(final WsdlProject project, Object param) {
8186
}
8287
}
8388

84-
8589
@AForm(name = "Add Swagger Definition", description = "Creates a REST API from the specified Swagger definition")
8690
public interface Form {
8791
@AField(name = "Swagger Definition", description = "Location or URL of Swagger definition", type = AFieldType.FILE)
8892
public final static String SWAGGERURL = "Swagger Definition";
8993

94+
@AField(name = "Default Media Type", description = "Default Media Type of the responses", type = AFieldType.STRING)
95+
public final static String DEFAULTMEDIATYPE = "Default Media Type";
96+
9097
@AField(name = "Definition Type", description = "Resource Listing or API Declaration",
9198
type = AFieldType.RADIOGROUP, values = {RESOURCE_LISTING_TYPE, API_DECLARATION_TYPE})
9299
public final static String TYPE = "Definition Type";

src/main/groovy/com/smartbear/swagger/CreateSwaggerProjectAction.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ public void perform(WorkspaceImpl workspace, Object param) {
5757
if (dialog == null) {
5858
dialog = ADialogBuilder.buildDialog(Form.class);
5959
dialog.setValue(Form.TYPE, RESOURCE_LISTING_TYPE);
60+
dialog.setValue(Form.DEFAULTMEDIATYPE, SwaggerUtils.DEFAULT_MEDIA_TYPE);
6061
dialog.getFormField(Form.SWAGGERURL).addFormFieldListener(new XFormFieldListener() {
6162
@Override
6263
public void valueChanged(XFormField sourceField, String newValue, String oldValue) {
@@ -85,7 +86,11 @@ public void valueChanged(XFormField sourceField, String newValue, String oldValu
8586
expUrl = new File(expUrl).toURI().toURL().toString();
8687
}
8788

88-
SwaggerImporter importer = SwaggerUtils.importSwaggerFromUrl(project, expUrl, dialog.getValue(Form.TYPE).equals(RESOURCE_LISTING_TYPE));
89+
SwaggerImporter importer = SwaggerUtils.importSwaggerFromUrl(
90+
project,
91+
expUrl,
92+
dialog.getValue(Form.TYPE).equals(RESOURCE_LISTING_TYPE),
93+
dialog.getValue(Form.DEFAULTMEDIATYPE));
8994
Analytics.trackAction("CreateSwaggerProject", "Importer", importer.getClass().getSimpleName());
9095

9196
break;
@@ -126,6 +131,9 @@ public interface Form {
126131
@AField(name = "Swagger Definition", description = "Location or URL of Swagger definition", type = AFieldType.FILE)
127132
public final static String SWAGGERURL = "Swagger Definition";
128133

134+
@AField(name = "Default Media Type", description = "Default Media Type of the responses", type = AFieldType.STRING)
135+
public final static String DEFAULTMEDIATYPE = "Default Media Type";
136+
129137
@AField(name = "Definition Type", description = "Resource Listing or API Declaration",
130138
type = AFieldType.RADIOGROUP, values = {RESOURCE_LISTING_TYPE, API_DECLARATION_TYPE})
131139
public final static String TYPE = "Definition Type";

src/main/groovy/com/smartbear/swagger/PluginConfig.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* Created by ole on 08/06/14.
88
*/
99

10-
@PluginConfiguration(groupId = "com.smartbear.soapui.plugins", name = "Swagger Plugin", version = "2.1",
10+
@PluginConfiguration(groupId = "com.smartbear.soapui.plugins", name = "Swagger Plugin", version = "2.3.1",
1111
autoDetect = true, description = "Provides Swagger 1.X/2.0 import/export functionality for REST APIs",
1212
infoUrl = "https://github.com/olensmar/soapui-swagger-plugin")
1313
public class PluginConfig extends PluginAdapter {

src/main/groovy/com/smartbear/swagger/Swagger1XImporter.groovy

Lines changed: 46 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,14 @@ package com.smartbear.swagger
1818

1919
import com.eviware.soapui.SoapUI
2020
import com.eviware.soapui.impl.rest.RestMethod
21+
import com.eviware.soapui.impl.rest.RestRepresentation
2122
import com.eviware.soapui.impl.rest.RestRequestInterface
2223
import com.eviware.soapui.impl.rest.RestResource
2324
import com.eviware.soapui.impl.rest.RestService
2425
import com.eviware.soapui.impl.rest.RestServiceFactory
2526
import com.eviware.soapui.impl.rest.support.RestParameter
2627
import com.eviware.soapui.impl.rest.support.RestParamsPropertyHolder.ParameterStyle
28+
import com.eviware.soapui.impl.wsdl.InterfaceFactoryRegistry
2729
import com.eviware.soapui.impl.wsdl.WsdlProject
2830
import com.smartbear.swagger4j.ApiDeclaration
2931
import com.smartbear.swagger4j.Parameter
@@ -42,9 +44,21 @@ import com.smartbear.swagger4j.Swagger
4244
class Swagger1XImporter implements SwaggerImporter {
4345

4446
private final WsdlProject project
47+
private final String defaultMediaType;
48+
private final boolean forRefactoring
4549

46-
public Swagger1XImporter(WsdlProject project) {
50+
public Swagger1XImporter(WsdlProject project, String defaultMediaType) {
51+
this(project, defaultMediaType, false)
52+
}
53+
54+
public Swagger1XImporter(WsdlProject project, String defaultMediaType, boolean forRefactoring) {
4755
this.project = project
56+
this.defaultMediaType = defaultMediaType
57+
this.forRefactoring = forRefactoring;
58+
}
59+
60+
public Swagger1XImporter(WsdlProject project) {
61+
this(project, "application/json")
4862
}
4963

5064
public RestService[] importSwagger(String url) {
@@ -124,8 +138,15 @@ class Swagger1XImporter implements SwaggerImporter {
124138
// loop all operations - import as methods
125139
it.operations.each {
126140
it
141+
def operation = it
127142

128-
RestMethod method = resource.addNewMethod(it.nickName)
143+
def methodName = it.nickName
144+
def cnt = 0
145+
while (resource.getRestMethodByName(methodName) != null) {
146+
methodName = it.nickName + " " + (++cnt)
147+
}
148+
149+
RestMethod method = resource.addNewMethod(methodName)
129150
method.method = RestRequestInterface.HttpMethod.valueOf(it.method.name().toUpperCase())
130151
method.description = it.summary
131152

@@ -150,10 +171,30 @@ class Swagger1XImporter implements SwaggerImporter {
150171
SoapUI.logError(e);
151172
}
152173

174+
p.description = it.description
153175
p.required = it.required
154176
}
155177
}
156178

179+
it.responseMessages?.each {
180+
def response = it
181+
182+
if (operation.produces == null || operation.produces.empty) {
183+
def representation = method.addNewRepresentation(RestRepresentation.Type.RESPONSE)
184+
185+
representation.status = [response.code]
186+
representation.mediaType = defaultMediaType
187+
representation.sampleContent = response.message
188+
} else {
189+
operation.produces?.each {
190+
def representation = method.addNewRepresentation(RestRepresentation.Type.RESPONSE)
191+
representation.mediaType = it
192+
representation.status = [response.code]
193+
representation.sampleContent = response.message
194+
}
195+
}
196+
}
197+
157198
// add a default request for the generated method
158199
method.addNewRequest("Request 1")
159200
}
@@ -163,7 +204,9 @@ class Swagger1XImporter implements SwaggerImporter {
163204
}
164205

165206
private RestService createRestService(String path, String name) {
166-
RestService restService = project.addNewInterface(name, RestServiceFactory.REST_TYPE)
207+
RestService restService = forRefactoring ?
208+
InterfaceFactoryRegistry.createNew(project, RestServiceFactory.REST_TYPE, name) :
209+
project.addNewInterface(name, RestServiceFactory.REST_TYPE)
167210

168211
if (path != null) {
169212
try {

src/main/groovy/com/smartbear/swagger/Swagger2Exporter.groovy

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,18 +23,18 @@ import com.eviware.soapui.impl.rest.support.RestParamsPropertyHolder
2323
import com.eviware.soapui.impl.rest.support.RestParamsPropertyHolder.ParameterStyle
2424
import com.eviware.soapui.impl.wsdl.WsdlProject
2525
import com.fasterxml.jackson.databind.ObjectMapper
26-
import com.wordnik.swagger.models.Info
27-
import com.wordnik.swagger.models.Operation
28-
import com.wordnik.swagger.models.Path
29-
import com.wordnik.swagger.models.Response
30-
import com.wordnik.swagger.models.Swagger
31-
import com.wordnik.swagger.models.parameters.BodyParameter
32-
import com.wordnik.swagger.models.parameters.HeaderParameter
33-
import com.wordnik.swagger.models.parameters.Parameter
34-
import com.wordnik.swagger.models.parameters.PathParameter
35-
import com.wordnik.swagger.models.parameters.QueryParameter
36-
import com.wordnik.swagger.util.Json
37-
import com.wordnik.swagger.util.Yaml
26+
import io.swagger.models.Info
27+
import io.swagger.models.Operation
28+
import io.swagger.models.Path
29+
import io.swagger.models.Response
30+
import io.swagger.models.Swagger
31+
import io.swagger.models.parameters.BodyParameter
32+
import io.swagger.models.parameters.HeaderParameter
33+
import io.swagger.models.parameters.Parameter
34+
import io.swagger.models.parameters.PathParameter
35+
import io.swagger.models.parameters.QueryParameter
36+
import io.swagger.util.Json
37+
import io.swagger.util.Yaml
3838

3939
/**
4040
* A simple Swagger exporter - now uses swagger4j library
@@ -74,6 +74,10 @@ class Swagger2Exporter implements SwaggerExporter {
7474
operation.addConsumes(it.mediaType)
7575
}
7676

77+
if (operation.responses.isEmpty()) {
78+
operation.addResponse(200, new Response())
79+
}
80+
7781
p.set(it.method.name().toLowerCase(), operation)
7882

7983
addParametersToOperation(it.params, operation)

0 commit comments

Comments
 (0)