forked from loafle/openapi-generator-original
Merge pull request #3018 from mateuszmackowiak/objc/binary_data
[Objc] Proper binary data handle
This commit is contained in:
commit
eeb14ae936
@ -1960,7 +1960,7 @@ public class DefaultCodegen {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
r.dataType = cm.datatype;
|
r.dataType = cm.datatype;
|
||||||
r.isBinary = cm.datatype.toLowerCase().startsWith("byte");
|
r.isBinary = isDataTypeBinary(cm.datatype);
|
||||||
if (cm.isContainer != null) {
|
if (cm.isContainer != null) {
|
||||||
r.simpleType = false;
|
r.simpleType = false;
|
||||||
r.containerType = cm.containerType;
|
r.containerType = cm.containerType;
|
||||||
@ -2129,7 +2129,7 @@ public class DefaultCodegen {
|
|||||||
p.baseType = cp.baseType;
|
p.baseType = cp.baseType;
|
||||||
p.dataType = cp.datatype;
|
p.dataType = cp.datatype;
|
||||||
p.isPrimitiveType = cp.isPrimitiveType;
|
p.isPrimitiveType = cp.isPrimitiveType;
|
||||||
p.isBinary = cp.datatype.toLowerCase().startsWith("byte");
|
p.isBinary = isDataTypeBinary(cp.datatype);
|
||||||
}
|
}
|
||||||
|
|
||||||
// set boolean flag (e.g. isString)
|
// set boolean flag (e.g. isString)
|
||||||
@ -2226,7 +2226,7 @@ public class DefaultCodegen {
|
|||||||
p.isCookieParam = true;
|
p.isCookieParam = true;
|
||||||
} else if (param instanceof BodyParameter) {
|
} else if (param instanceof BodyParameter) {
|
||||||
p.isBodyParam = true;
|
p.isBodyParam = true;
|
||||||
p.isBinary = p.dataType.toLowerCase().startsWith("byte");
|
p.isBinary = isDataTypeBinary(p.dataType);
|
||||||
} else if (param instanceof FormParameter) {
|
} else if (param instanceof FormParameter) {
|
||||||
if ("file".equalsIgnoreCase(((FormParameter) param).getType())) {
|
if ("file".equalsIgnoreCase(((FormParameter) param).getType())) {
|
||||||
p.isFile = true;
|
p.isFile = true;
|
||||||
@ -2242,6 +2242,10 @@ public class DefaultCodegen {
|
|||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isDataTypeBinary(String dataType) {
|
||||||
|
return dataType.toLowerCase().startsWith("byte");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert map of Swagger SecuritySchemeDefinition objects to a list of Codegen Security objects
|
* Convert map of Swagger SecuritySchemeDefinition objects to a list of Codegen Security objects
|
||||||
*
|
*
|
||||||
|
@ -23,7 +23,6 @@ public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig {
|
|||||||
public static final String GIT_REPO_URL = "gitRepoURL";
|
public static final String GIT_REPO_URL = "gitRepoURL";
|
||||||
public static final String DEFAULT_LICENSE = "Apache License, Version 2.0";
|
public static final String DEFAULT_LICENSE = "Apache License, Version 2.0";
|
||||||
public static final String CORE_DATA = "coreData";
|
public static final String CORE_DATA = "coreData";
|
||||||
public static final String BinaryDataType = "ObjcClientCodegenBinaryData";
|
|
||||||
|
|
||||||
protected Set<String> foundationClasses = new HashSet<String>();
|
protected Set<String> foundationClasses = new HashSet<String>();
|
||||||
protected String podName = "SwaggerClient";
|
protected String podName = "SwaggerClient";
|
||||||
@ -70,8 +69,7 @@ public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig {
|
|||||||
defaultIncludes.add("NSMutableArray");
|
defaultIncludes.add("NSMutableArray");
|
||||||
defaultIncludes.add("NSMutableDictionary");
|
defaultIncludes.add("NSMutableDictionary");
|
||||||
defaultIncludes.add("NSManagedObject");
|
defaultIncludes.add("NSManagedObject");
|
||||||
|
defaultIncludes.add("NSData");
|
||||||
defaultIncludes.add(BinaryDataType);
|
|
||||||
|
|
||||||
advancedMapingTypes.add("NSDictionary");
|
advancedMapingTypes.add("NSDictionary");
|
||||||
advancedMapingTypes.add("NSArray");
|
advancedMapingTypes.add("NSArray");
|
||||||
@ -88,6 +86,7 @@ public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig {
|
|||||||
languageSpecificPrimitives.add("NSString");
|
languageSpecificPrimitives.add("NSString");
|
||||||
languageSpecificPrimitives.add("NSObject");
|
languageSpecificPrimitives.add("NSObject");
|
||||||
languageSpecificPrimitives.add("NSDate");
|
languageSpecificPrimitives.add("NSDate");
|
||||||
|
languageSpecificPrimitives.add("NSData");
|
||||||
languageSpecificPrimitives.add("NSURL");
|
languageSpecificPrimitives.add("NSURL");
|
||||||
languageSpecificPrimitives.add("bool");
|
languageSpecificPrimitives.add("bool");
|
||||||
languageSpecificPrimitives.add("BOOL");
|
languageSpecificPrimitives.add("BOOL");
|
||||||
@ -109,8 +108,9 @@ public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig {
|
|||||||
typeMapping.put("List", "NSArray");
|
typeMapping.put("List", "NSArray");
|
||||||
typeMapping.put("object", "NSObject");
|
typeMapping.put("object", "NSObject");
|
||||||
typeMapping.put("file", "NSURL");
|
typeMapping.put("file", "NSURL");
|
||||||
typeMapping.put("binary", BinaryDataType);
|
typeMapping.put("binary", "NSData");
|
||||||
typeMapping.put("ByteArray", BinaryDataType);
|
typeMapping.put("ByteArray", "NSData");
|
||||||
|
typeMapping.put("byte", "NSData");
|
||||||
|
|
||||||
// ref: http://www.tutorialspoint.com/objective_c/objective_c_basic_syntax.htm
|
// ref: http://www.tutorialspoint.com/objective_c/objective_c_basic_syntax.htm
|
||||||
setReservedWordsLowerCase(
|
setReservedWordsLowerCase(
|
||||||
@ -143,6 +143,7 @@ public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig {
|
|||||||
"NSObject",
|
"NSObject",
|
||||||
"NSString",
|
"NSString",
|
||||||
"NSDate",
|
"NSDate",
|
||||||
|
"NSData",
|
||||||
"NSURL",
|
"NSURL",
|
||||||
"NSDictionary")
|
"NSDictionary")
|
||||||
);
|
);
|
||||||
@ -317,16 +318,10 @@ public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig {
|
|||||||
if (p instanceof ArrayProperty) {
|
if (p instanceof ArrayProperty) {
|
||||||
ArrayProperty ap = (ArrayProperty) p;
|
ArrayProperty ap = (ArrayProperty) p;
|
||||||
Property inner = ap.getItems();
|
Property inner = ap.getItems();
|
||||||
String innerType = getSwaggerType(inner);
|
|
||||||
|
|
||||||
String innerTypeDeclaration = getTypeDeclaration(inner);
|
String innerTypeDeclaration = getTypeDeclaration(inner);
|
||||||
if (innerTypeDeclaration.endsWith("*")) {
|
if (innerTypeDeclaration.endsWith("*")) {
|
||||||
innerTypeDeclaration = innerTypeDeclaration.substring(0, innerTypeDeclaration.length() - 1);
|
innerTypeDeclaration = innerTypeDeclaration.substring(0, innerTypeDeclaration.length() - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(innerTypeDeclaration.equalsIgnoreCase(BinaryDataType)) {
|
|
||||||
return "NSData*";
|
|
||||||
}
|
|
||||||
// In this condition, type of property p is array of primitive,
|
// In this condition, type of property p is array of primitive,
|
||||||
// return container type with pointer, e.g. `NSArray*<NSString*>*'
|
// return container type with pointer, e.g. `NSArray*<NSString*>*'
|
||||||
if (languageSpecificPrimitives.contains(innerTypeDeclaration)) {
|
if (languageSpecificPrimitives.contains(innerTypeDeclaration)) {
|
||||||
@ -363,7 +358,6 @@ public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
String swaggerType = getSwaggerType(p);
|
String swaggerType = getSwaggerType(p);
|
||||||
|
|
||||||
// In this condition, type of p is objective-c primitive type, e.g. `NSSNumber',
|
// In this condition, type of p is objective-c primitive type, e.g. `NSSNumber',
|
||||||
// return type of p with pointer, e.g. `NSNumber*'
|
// return type of p with pointer, e.g. `NSNumber*'
|
||||||
if (languageSpecificPrimitives.contains(swaggerType) &&
|
if (languageSpecificPrimitives.contains(swaggerType) &&
|
||||||
@ -394,10 +388,6 @@ public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig {
|
|||||||
if (innerTypeDeclaration.endsWith("*")) {
|
if (innerTypeDeclaration.endsWith("*")) {
|
||||||
innerTypeDeclaration = innerTypeDeclaration.substring(0, innerTypeDeclaration.length() - 1);
|
innerTypeDeclaration = innerTypeDeclaration.substring(0, innerTypeDeclaration.length() - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(innerTypeDeclaration.equalsIgnoreCase(BinaryDataType)) {
|
|
||||||
return "NSData*";
|
|
||||||
}
|
|
||||||
// In this codition, type of property p is array of primitive,
|
// In this codition, type of property p is array of primitive,
|
||||||
// return container type with pointer, e.g. `NSArray*<NSString*>*'
|
// return container type with pointer, e.g. `NSArray*<NSString*>*'
|
||||||
if (languageSpecificPrimitives.contains(innerTypeDeclaration)) {
|
if (languageSpecificPrimitives.contains(innerTypeDeclaration)) {
|
||||||
@ -454,6 +444,11 @@ public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isDataTypeBinary(String dataType) {
|
||||||
|
return dataType.toLowerCase().startsWith("nsdata");
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toModelName(String type) {
|
public String toModelName(String type) {
|
||||||
// model name cannot use reserved keyword
|
// model name cannot use reserved keyword
|
||||||
|
@ -265,6 +265,7 @@ static NSString * {{classPrefix}}__fileNameForResponse(NSURLResponse *response)
|
|||||||
self.requestSerializer = [AFHTTPRequestSerializer serializer];
|
self.requestSerializer = [AFHTTPRequestSerializer serializer];
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
self.requestSerializer = [AFHTTPRequestSerializer serializer];
|
||||||
NSAssert(NO, @"Unsupported request type %@", requestContentType);
|
NSAssert(NO, @"Unsupported request type %@", requestContentType);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -280,7 +281,9 @@ static NSString * {{classPrefix}}__fileNameForResponse(NSURLResponse *response)
|
|||||||
queryParams = [self.sanitizer sanitizeForSerialization:queryParams];
|
queryParams = [self.sanitizer sanitizeForSerialization:queryParams];
|
||||||
headerParams = [self.sanitizer sanitizeForSerialization:headerParams];
|
headerParams = [self.sanitizer sanitizeForSerialization:headerParams];
|
||||||
formParams = [self.sanitizer sanitizeForSerialization:formParams];
|
formParams = [self.sanitizer sanitizeForSerialization:formParams];
|
||||||
|
if(![body isKindOfClass:[NSData class]]) {
|
||||||
body = [self.sanitizer sanitizeForSerialization:body];
|
body = [self.sanitizer sanitizeForSerialization:body];
|
||||||
|
}
|
||||||
|
|
||||||
// auth setting
|
// auth setting
|
||||||
[self updateHeaderParams:&headerParams queryParams:&queryParams WithAuthSettings:authSettings];
|
[self updateHeaderParams:&headerParams queryParams:&queryParams WithAuthSettings:authSettings];
|
||||||
|
@ -17,19 +17,21 @@
|
|||||||
withParameters:(id)parameters
|
withParameters:(id)parameters
|
||||||
error:(NSError *__autoreleasing *)error
|
error:(NSError *__autoreleasing *)error
|
||||||
{
|
{
|
||||||
|
if (!parameters) {
|
||||||
|
return request;
|
||||||
|
}
|
||||||
// If the body data which will be serialized isn't NSArray or NSDictionary
|
// If the body data which will be serialized isn't NSArray or NSDictionary
|
||||||
// then put the data in the http request body directly.
|
// then put the data in the http request body directly.
|
||||||
if ([parameters isKindOfClass:[NSArray class]] || [parameters isKindOfClass:[NSDictionary class]]) {
|
if ([parameters isKindOfClass:[NSArray class]] || [parameters isKindOfClass:[NSDictionary class]]) {
|
||||||
return [super requestBySerializingRequest:request withParameters:parameters error:error];
|
return [super requestBySerializingRequest:request withParameters:parameters error:error];
|
||||||
} else {
|
}
|
||||||
NSMutableURLRequest *mutableRequest = [request mutableCopy];
|
NSMutableURLRequest *mutableRequest = [request mutableCopy];
|
||||||
|
if([parameters isKindOfClass:[NSData class]]) {
|
||||||
if (parameters) {
|
[mutableRequest setHTTPBody:parameters];
|
||||||
|
} else {
|
||||||
[mutableRequest setHTTPBody:[parameters dataUsingEncoding:self.stringEncoding]];
|
[mutableRequest setHTTPBody:[parameters dataUsingEncoding:self.stringEncoding]];
|
||||||
}
|
}
|
||||||
|
|
||||||
return mutableRequest;
|
return mutableRequest;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -1,21 +1,9 @@
|
|||||||
package io.swagger.codegen.objc;
|
package io.swagger.codegen.objc;
|
||||||
|
|
||||||
import io.swagger.codegen.CodegenModel;
|
import io.swagger.codegen.*;
|
||||||
import io.swagger.codegen.CodegenOperation;
|
|
||||||
import io.swagger.codegen.CodegenProperty;
|
|
||||||
import io.swagger.codegen.DefaultCodegen;
|
|
||||||
import io.swagger.codegen.languages.ObjcClientCodegen;
|
import io.swagger.codegen.languages.ObjcClientCodegen;
|
||||||
import io.swagger.models.ArrayModel;
|
import io.swagger.models.*;
|
||||||
import io.swagger.models.Model;
|
import io.swagger.models.properties.*;
|
||||||
import io.swagger.models.ModelImpl;
|
|
||||||
import io.swagger.models.Path;
|
|
||||||
import io.swagger.models.Swagger;
|
|
||||||
import io.swagger.models.properties.ArrayProperty;
|
|
||||||
import io.swagger.models.properties.DateTimeProperty;
|
|
||||||
import io.swagger.models.properties.LongProperty;
|
|
||||||
import io.swagger.models.properties.MapProperty;
|
|
||||||
import io.swagger.models.properties.RefProperty;
|
|
||||||
import io.swagger.models.properties.StringProperty;
|
|
||||||
import io.swagger.parser.SwaggerParser;
|
import io.swagger.parser.SwaggerParser;
|
||||||
|
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
@ -279,6 +267,20 @@ public class ObjcModelTest {
|
|||||||
Assert.assertEquals(Sets.intersection(cm.imports, Sets.newHashSet("SWGChildren")).size(), 1);
|
Assert.assertEquals(Sets.intersection(cm.imports, Sets.newHashSet("SWGChildren")).size(), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test(description = "test binary data")
|
||||||
|
public void binaryDataModelTest() {
|
||||||
|
final Swagger model = new SwaggerParser().read("src/test/resources/2_0/binaryDataTest.json");
|
||||||
|
final DefaultCodegen codegen = new ObjcClientCodegen();
|
||||||
|
final String path = "/tests/binaryResponse";
|
||||||
|
final Operation p = model.getPaths().get(path).getPost();
|
||||||
|
final CodegenOperation op = codegen.fromOperation(path, "post", p, model.getDefinitions());
|
||||||
|
|
||||||
|
Assert.assertEquals(op.returnType, "NSData*");
|
||||||
|
Assert.assertEquals(op.bodyParam.dataType, "NSData*");
|
||||||
|
Assert.assertTrue(op.bodyParam.isBinary);
|
||||||
|
Assert.assertTrue(op.responses.get(0).isBinary);
|
||||||
|
}
|
||||||
|
|
||||||
@Test(description = "create proper imports per #316")
|
@Test(description = "create proper imports per #316")
|
||||||
public void issue316Test() {
|
public void issue316Test() {
|
||||||
final Swagger model = new SwaggerParser().read("src/test/resources/2_0/postBodyTest.json");
|
final Swagger model = new SwaggerParser().read("src/test/resources/2_0/postBodyTest.json");
|
||||||
|
@ -259,6 +259,7 @@ static NSString * SWG__fileNameForResponse(NSURLResponse *response) {
|
|||||||
self.requestSerializer = [AFHTTPRequestSerializer serializer];
|
self.requestSerializer = [AFHTTPRequestSerializer serializer];
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
self.requestSerializer = [AFHTTPRequestSerializer serializer];
|
||||||
NSAssert(NO, @"Unsupported request type %@", requestContentType);
|
NSAssert(NO, @"Unsupported request type %@", requestContentType);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -274,7 +275,9 @@ static NSString * SWG__fileNameForResponse(NSURLResponse *response) {
|
|||||||
queryParams = [self.sanitizer sanitizeForSerialization:queryParams];
|
queryParams = [self.sanitizer sanitizeForSerialization:queryParams];
|
||||||
headerParams = [self.sanitizer sanitizeForSerialization:headerParams];
|
headerParams = [self.sanitizer sanitizeForSerialization:headerParams];
|
||||||
formParams = [self.sanitizer sanitizeForSerialization:formParams];
|
formParams = [self.sanitizer sanitizeForSerialization:formParams];
|
||||||
|
if(![body isKindOfClass:[NSData class]]) {
|
||||||
body = [self.sanitizer sanitizeForSerialization:body];
|
body = [self.sanitizer sanitizeForSerialization:body];
|
||||||
|
}
|
||||||
|
|
||||||
// auth setting
|
// auth setting
|
||||||
[self updateHeaderParams:&headerParams queryParams:&queryParams WithAuthSettings:authSettings];
|
[self updateHeaderParams:&headerParams queryParams:&queryParams WithAuthSettings:authSettings];
|
||||||
|
@ -17,19 +17,21 @@
|
|||||||
withParameters:(id)parameters
|
withParameters:(id)parameters
|
||||||
error:(NSError *__autoreleasing *)error
|
error:(NSError *__autoreleasing *)error
|
||||||
{
|
{
|
||||||
|
if (!parameters) {
|
||||||
|
return request;
|
||||||
|
}
|
||||||
// If the body data which will be serialized isn't NSArray or NSDictionary
|
// If the body data which will be serialized isn't NSArray or NSDictionary
|
||||||
// then put the data in the http request body directly.
|
// then put the data in the http request body directly.
|
||||||
if ([parameters isKindOfClass:[NSArray class]] || [parameters isKindOfClass:[NSDictionary class]]) {
|
if ([parameters isKindOfClass:[NSArray class]] || [parameters isKindOfClass:[NSDictionary class]]) {
|
||||||
return [super requestBySerializingRequest:request withParameters:parameters error:error];
|
return [super requestBySerializingRequest:request withParameters:parameters error:error];
|
||||||
} else {
|
}
|
||||||
NSMutableURLRequest *mutableRequest = [request mutableCopy];
|
NSMutableURLRequest *mutableRequest = [request mutableCopy];
|
||||||
|
if([parameters isKindOfClass:[NSData class]]) {
|
||||||
if (parameters) {
|
[mutableRequest setHTTPBody:parameters];
|
||||||
|
} else {
|
||||||
[mutableRequest setHTTPBody:[parameters dataUsingEncoding:self.stringEncoding]];
|
[mutableRequest setHTTPBody:[parameters dataUsingEncoding:self.stringEncoding]];
|
||||||
}
|
}
|
||||||
|
|
||||||
return mutableRequest;
|
return mutableRequest;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user