Skip to content

Commit 781ee9a

Browse files
authored
Merge branch 'master' into feature/fix-issue-9685
2 parents 8bccfea + c9252e8 commit 781ee9a

File tree

31 files changed

+1016
-722
lines changed

31 files changed

+1016
-722
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
set executable=.\modules\swagger-codegen-cli\target\swagger-codegen-cli.jar
2+
3+
If Not Exist %executable% (
4+
mvn clean package
5+
)
6+
7+
REM set JAVA_OPTS=%JAVA_OPTS% -Xmx1024M -DloggerPath=conf/log4j.properties
8+
set ags=generate --artifact-id "nodejs-petstore-server" -i modules\swagger-codegen\src\test\resources\2_0\petstore.yaml -l nodejs-server -o samples\server\petstore\nodejs
9+
10+
java %JAVA_OPTS% -jar %executable% %ags%

modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractJavaCodegen.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,8 @@ public AbstractJavaCodegen() {
9898
modelDocTemplateFiles.put("model_doc.mustache", ".md");
9999
apiDocTemplateFiles.put("api_doc.mustache", ".md");
100100

101-
hideGenerationTimestamp = false;
102-
101+
hideGenerationTimestamp = false;
102+
103103
setReservedWordsLowerCase(
104104
Arrays.asList(
105105
// used as internal variables, can collide with parameter names
@@ -167,6 +167,7 @@ public AbstractJavaCodegen() {
167167
dateOptions.put("java8", "Java 8 native JSR310 (preferred for jdk 1.8+) - note: this also sets \"" + JAVA8_MODE + "\" to true");
168168
dateOptions.put("threetenbp", "Backport of JSR310 (preferred for jdk < 1.8)");
169169
dateOptions.put("java8-localdatetime", "Java 8 using LocalDateTime (for legacy app only)");
170+
dateOptions.put("java8-instant", "Java 8 using Instant");
170171
dateOptions.put("joda", "Joda (for legacy app only)");
171172
dateOptions.put("legacy", "Legacy java.util.Date (if you really have a good reason not to use threetenbp");
172173
dateLibrary.setEnum(dateOptions);
@@ -440,13 +441,19 @@ public void processOpts() {
440441
} else if (dateLibrary.startsWith("java8")) {
441442
additionalProperties.put("java8", "true");
442443
additionalProperties.put("jsr310", "true");
443-
typeMapping.put("date", "LocalDate");
444-
importMapping.put("LocalDate", "java.time.LocalDate");
445444
if ("java8-localdatetime".equals(dateLibrary)) {
445+
typeMapping.put("date", "LocalDate");
446446
typeMapping.put("DateTime", "LocalDateTime");
447+
importMapping.put("LocalDate", "java.time.LocalDate");
447448
importMapping.put("LocalDateTime", "java.time.LocalDateTime");
449+
} else if ("java8-instant".equals(dateLibrary)) {
450+
typeMapping.put("date", "Instant");
451+
typeMapping.put("DateTime", "Instant");
452+
importMapping.put("Instant", "java.time.Instant");
448453
} else {
454+
typeMapping.put("date", "LocalDate");
449455
typeMapping.put("DateTime", "OffsetDateTime");
456+
importMapping.put("LocalDate", "java.time.LocalDate");
450457
importMapping.put("OffsetDateTime", "java.time.OffsetDateTime");
451458
}
452459
} else if (dateLibrary.equals("legacy")) {

modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/NodeJSServerCodegen.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -158,9 +158,13 @@ public String apiFilename(String templateName, String tag) {
158158
String result = super.apiFilename(templateName, tag);
159159

160160
if (templateName.equals("service.mustache")) {
161-
String stringToMatch = File.separator + "controllers" + File.separator;
162-
String replacement = File.separator + implFolder + File.separator;
163-
result = result.replaceAll(Pattern.quote(stringToMatch), replacement);
161+
String regexFileSep = File.separator;
162+
if (regexFileSep.equals("\\")) {
163+
regexFileSep = "\\\\";
164+
}
165+
String stringToMatch = regexFileSep + "controllers" + regexFileSep;
166+
String replacement = regexFileSep + implFolder + regexFileSep;
167+
result = result.replaceAll(stringToMatch, replacement);
164168
}
165169
return result;
166170
}

modules/swagger-codegen/src/main/resources/swift4/CodableHelper.mustache

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ import Foundation
99

1010
public typealias EncodeResult = (data: Data?, error: Error?)
1111

12+
enum DateError: String, Error {
13+
case invalidDate
14+
}
15+
1216
open class CodableHelper {
1317
1418
open static var dateformatter: DateFormatter?
@@ -18,16 +22,39 @@ open class CodableHelper {
1822
var returnedError: Error? = nil
1923
2024
let decoder = JSONDecoder()
25+
2126
if let df = self.dateformatter {
2227
decoder.dateDecodingStrategy = .formatted(df)
2328
} else {
2429
decoder.dataDecodingStrategy = .base64
25-
let formatter = DateFormatter()
26-
formatter.calendar = Calendar(identifier: .iso8601)
27-
formatter.locale = Locale(identifier: "en_US_POSIX")
28-
formatter.timeZone = TimeZone(secondsFromGMT: 0)
29-
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX"
30-
decoder.dateDecodingStrategy = .formatted(formatter)
30+
decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
31+
let container = try decoder.singleValueContainer()
32+
let dateStr = try container.decode(String.self)
33+
34+
let formatters = [
35+
"yyyy-MM-dd",
36+
"yyyy-MM-dd'T'HH:mm:ssZZZZZ",
37+
"yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ",
38+
"yyyy-MM-dd'T'HH:mm:ss'Z'",
39+
"yyyy-MM-dd'T'HH:mm:ss.SSS",
40+
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",
41+
"yyyy-MM-dd HH:mm:ss"
42+
].map { (format: String) -> DateFormatter in
43+
let formatter = DateFormatter()
44+
formatter.locale = Locale(identifier: "en_US_POSIX")
45+
formatter.dateFormat = format
46+
return formatter
47+
}
48+
49+
for formatter in formatters {
50+
51+
if let date = formatter.date(from: dateStr) {
52+
return date
53+
}
54+
}
55+
56+
throw DateError.invalidDate
57+
})
3158
}
3259

3360
do {
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2.4.0-SNAPSHOT
1+
2.4.9-SNAPSHOT
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2.4.3-SNAPSHOT
1+
2.4.9-SNAPSHOT

samples/client/petstore/swift4/default/PetstoreClient/Classes/Swaggers/APIs/FakeClassnameTags123API.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,7 @@ open class FakeClassnameTags123API {
4545
let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body)
4646

4747
var url = URLComponents(string: URLString)
48-
url?.queryItems = APIHelper.mapValuesToQueryItems([
49-
])
48+
url?.queryItems = APIHelper.mapValuesToQueryItems([:])
5049

5150
let requestBuilder: RequestBuilder<Client>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder()
5251

samples/client/petstore/swift4/default/PetstoreClient/Classes/Swaggers/AlamofireImplementations.swift

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ class AlamofireRequestBuilderFactory: RequestBuilderFactory {
2020
// Store manager to retain its reference
2121
private var managerStore: [String: Alamofire.SessionManager] = [:]
2222

23+
// Sync queue to manage safe access to the store manager
24+
private let syncQueue = DispatchQueue(label: "thread-safe-sync-queue", attributes: .concurrent)
25+
2326
open class AlamofireRequestBuilder<T>: RequestBuilder<T> {
2427
required public init(method: String, URLString: String, parameters: [String : Any]?, isBody: Bool, headers: [String : String] = [:]) {
2528
super.init(method: method, URLString: URLString, parameters: parameters, isBody: isBody, headers: headers)
@@ -58,7 +61,9 @@ open class AlamofireRequestBuilder<T>: RequestBuilder<T> {
5861
let managerId:String = UUID().uuidString
5962
// Create a new manager for each request to customize its request header
6063
let manager = createSessionManager()
61-
managerStore[managerId] = manager
64+
syncQueue.async(flags: .barrier) {
65+
managerStore[managerId] = manager
66+
}
6267

6368
let encoding:ParameterEncoding = isBody ? JSONDataEncoding() : URLEncoding()
6469

@@ -112,7 +117,9 @@ open class AlamofireRequestBuilder<T>: RequestBuilder<T> {
112117
}
113118

114119
let cleanupRequest = {
115-
_ = managerStore.removeValue(forKey: managerId)
120+
syncQueue.async(flags: .barrier) {
121+
_ = managerStore.removeValue(forKey: managerId)
122+
}
116123
}
117124

118125
let validatedRequest = request.validate()
@@ -314,7 +321,9 @@ open class AlamofireDecodableRequestBuilder<T:Decodable>: AlamofireRequestBuilde
314321
}
315322

316323
let cleanupRequest = {
317-
_ = managerStore.removeValue(forKey: managerId)
324+
syncQueue.async(flags: .barrier) {
325+
_ = managerStore.removeValue(forKey: managerId)
326+
}
318327
}
319328

320329
let validatedRequest = request.validate()

samples/client/petstore/swift4/default/PetstoreClient/Classes/Swaggers/CodableHelper.swift

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ import Foundation
99

1010
public typealias EncodeResult = (data: Data?, error: Error?)
1111

12+
enum DateError: String, Error {
13+
case invalidDate
14+
}
15+
1216
open class CodableHelper {
1317

1418
open static var dateformatter: DateFormatter?
@@ -18,16 +22,39 @@ open class CodableHelper {
1822
var returnedError: Error? = nil
1923

2024
let decoder = JSONDecoder()
25+
2126
if let df = self.dateformatter {
2227
decoder.dateDecodingStrategy = .formatted(df)
2328
} else {
2429
decoder.dataDecodingStrategy = .base64
25-
let formatter = DateFormatter()
26-
formatter.calendar = Calendar(identifier: .iso8601)
27-
formatter.locale = Locale(identifier: "en_US_POSIX")
28-
formatter.timeZone = TimeZone(secondsFromGMT: 0)
29-
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX"
30-
decoder.dateDecodingStrategy = .formatted(formatter)
30+
decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
31+
let container = try decoder.singleValueContainer()
32+
let dateStr = try container.decode(String.self)
33+
34+
let formatters = [
35+
"yyyy-MM-dd",
36+
"yyyy-MM-dd'T'HH:mm:ssZZZZZ",
37+
"yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ",
38+
"yyyy-MM-dd'T'HH:mm:ss'Z'",
39+
"yyyy-MM-dd'T'HH:mm:ss.SSS",
40+
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",
41+
"yyyy-MM-dd HH:mm:ss"
42+
].map { (format: String) -> DateFormatter in
43+
let formatter = DateFormatter()
44+
formatter.locale = Locale(identifier: "en_US_POSIX")
45+
formatter.dateFormat = format
46+
return formatter
47+
}
48+
49+
for formatter in formatters {
50+
51+
if let date = formatter.date(from: dateStr) {
52+
return date
53+
}
54+
}
55+
56+
throw DateError.invalidDate
57+
})
3158
}
3259

3360
do {

samples/client/petstore/swift4/default/SwaggerClientTests/Podfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ end
1212
post_install do |installer|
1313
installer.pods_project.targets.each do |target|
1414
target.build_configurations.each do |configuration|
15-
configuration.build_settings['SWIFT_VERSION'] = "3.0"
15+
configuration.build_settings['SWIFT_VERSION'] = "4.2"
1616
end
1717
end
1818
end

0 commit comments

Comments
 (0)