Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -1960,7 +1960,7 @@ public CodegenResponse fromResponse(String responseCode, Response response) {
}
}
r.dataType = cm.datatype;
r.isBinary = cm.datatype.toLowerCase().startsWith("byte");
r.isBinary = isDataTypeBinary(cm.datatype);
if (cm.isContainer != null) {
r.simpleType = false;
r.containerType = cm.containerType;
Expand Down Expand Up @@ -2129,7 +2129,7 @@ public CodegenParameter fromParameter(Parameter param, Set<String> imports) {
p.baseType = cp.baseType;
p.dataType = cp.datatype;
p.isPrimitiveType = cp.isPrimitiveType;
p.isBinary = cp.datatype.toLowerCase().startsWith("byte");
p.isBinary = isDataTypeBinary(cp.datatype);
}

// set boolean flag (e.g. isString)
Expand Down Expand Up @@ -2226,7 +2226,7 @@ public CodegenParameter fromParameter(Parameter param, Set<String> imports) {
p.isCookieParam = true;
} else if (param instanceof BodyParameter) {
p.isBodyParam = true;
p.isBinary = p.dataType.toLowerCase().startsWith("byte");
p.isBinary = isDataTypeBinary(p.dataType);
} else if (param instanceof FormParameter) {
if ("file".equalsIgnoreCase(((FormParameter) param).getType())) {
p.isFile = true;
Expand All @@ -2242,6 +2242,10 @@ public CodegenParameter fromParameter(Parameter param, Set<String> imports) {
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
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig {
public static final String GIT_REPO_URL = "gitRepoURL";
public static final String DEFAULT_LICENSE = "Apache License, Version 2.0";
public static final String CORE_DATA = "coreData";
public static final String BinaryDataType = "ObjcClientCodegenBinaryData";

protected Set<String> foundationClasses = new HashSet<String>();
protected String podName = "SwaggerClient";
Expand Down Expand Up @@ -70,8 +69,7 @@ public ObjcClientCodegen() {
defaultIncludes.add("NSMutableArray");
defaultIncludes.add("NSMutableDictionary");
defaultIncludes.add("NSManagedObject");

defaultIncludes.add(BinaryDataType);
defaultIncludes.add("NSData");

advancedMapingTypes.add("NSDictionary");
advancedMapingTypes.add("NSArray");
Expand All @@ -88,6 +86,7 @@ public ObjcClientCodegen() {
languageSpecificPrimitives.add("NSString");
languageSpecificPrimitives.add("NSObject");
languageSpecificPrimitives.add("NSDate");
languageSpecificPrimitives.add("NSData");
languageSpecificPrimitives.add("NSURL");
languageSpecificPrimitives.add("bool");
languageSpecificPrimitives.add("BOOL");
Expand All @@ -109,8 +108,9 @@ public ObjcClientCodegen() {
typeMapping.put("List", "NSArray");
typeMapping.put("object", "NSObject");
typeMapping.put("file", "NSURL");
typeMapping.put("binary", BinaryDataType);
typeMapping.put("ByteArray", BinaryDataType);
typeMapping.put("binary", "NSData");
typeMapping.put("ByteArray", "NSData");
typeMapping.put("byte", "NSData");

// ref: http://www.tutorialspoint.com/objective_c/objective_c_basic_syntax.htm
setReservedWordsLowerCase(
Expand Down Expand Up @@ -143,6 +143,7 @@ public ObjcClientCodegen() {
"NSObject",
"NSString",
"NSDate",
"NSData",
"NSURL",
"NSDictionary")
);
Expand Down Expand Up @@ -317,16 +318,10 @@ public String getTypeDeclaration(Property p) {
if (p instanceof ArrayProperty) {
ArrayProperty ap = (ArrayProperty) p;
Property inner = ap.getItems();
String innerType = getSwaggerType(inner);

String innerTypeDeclaration = getTypeDeclaration(inner);
if (innerTypeDeclaration.endsWith("*")) {
innerTypeDeclaration = innerTypeDeclaration.substring(0, innerTypeDeclaration.length() - 1);
}

if(innerTypeDeclaration.equalsIgnoreCase(BinaryDataType)) {
return "NSData*";
}
// In this condition, type of property p is array of primitive,
// return container type with pointer, e.g. `NSArray*<NSString*>*'
if (languageSpecificPrimitives.contains(innerTypeDeclaration)) {
Expand Down Expand Up @@ -363,7 +358,6 @@ public String getTypeDeclaration(Property p) {
}
} else {
String swaggerType = getSwaggerType(p);

// In this condition, type of p is objective-c primitive type, e.g. `NSSNumber',
// return type of p with pointer, e.g. `NSNumber*'
if (languageSpecificPrimitives.contains(swaggerType) &&
Expand Down Expand Up @@ -394,10 +388,6 @@ public String getTypeCoreDataDeclaration(Property p) {
if (innerTypeDeclaration.endsWith("*")) {
innerTypeDeclaration = innerTypeDeclaration.substring(0, innerTypeDeclaration.length() - 1);
}

if(innerTypeDeclaration.equalsIgnoreCase(BinaryDataType)) {
return "NSData*";
}
// In this codition, type of property p is array of primitive,
// return container type with pointer, e.g. `NSArray*<NSString*>*'
if (languageSpecificPrimitives.contains(innerTypeDeclaration)) {
Expand Down Expand Up @@ -454,6 +444,11 @@ else if (languageSpecificPrimitives.contains(swaggerType)) {
}
}

@Override
public boolean isDataTypeBinary(String dataType) {
return dataType.toLowerCase().startsWith("nsdata");
}

@Override
public String toModelName(String type) {
// model name cannot use reserved keyword
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -259,6 +259,7 @@ static NSString * {{classPrefix}}__fileNameForResponse(NSURLResponse *response)
self.requestSerializer = [AFHTTPRequestSerializer serializer];
}
else {
self.requestSerializer = [AFHTTPRequestSerializer serializer];
NSAssert(NO, @"Unsupported request type %@", requestContentType);
}

Expand All @@ -274,7 +275,9 @@ static NSString * {{classPrefix}}__fileNameForResponse(NSURLResponse *response)
queryParams = [self.sanitizer sanitizeForSerialization:queryParams];
headerParams = [self.sanitizer sanitizeForSerialization:headerParams];
formParams = [self.sanitizer sanitizeForSerialization:formParams];
body = [self.sanitizer sanitizeForSerialization:body];
if(![body isKindOfClass:[NSData class]]) {
body = [self.sanitizer sanitizeForSerialization:body];
}

// auth setting
[self updateHeaderParams:&headerParams queryParams:&queryParams WithAuthSettings:authSettings];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,21 @@
withParameters:(id)parameters
error:(NSError *__autoreleasing *)error
{
if (!parameters) {
return request;
}
// If the body data which will be serialized isn't NSArray or NSDictionary
// then put the data in the http request body directly.
if ([parameters isKindOfClass:[NSArray class]] || [parameters isKindOfClass:[NSDictionary class]]) {
return [super requestBySerializingRequest:request withParameters:parameters error:error];
}
NSMutableURLRequest *mutableRequest = [request mutableCopy];
if([parameters isKindOfClass:[NSData class]]) {
[mutableRequest setHTTPBody:parameters];
} else {
NSMutableURLRequest *mutableRequest = [request mutableCopy];

if (parameters) {
[mutableRequest setHTTPBody:[parameters dataUsingEncoding:self.stringEncoding]];
}

return mutableRequest;
[mutableRequest setHTTPBody:[parameters dataUsingEncoding:self.stringEncoding]];
}
return mutableRequest;
}

@end
Original file line number Diff line number Diff line change
@@ -1,21 +1,9 @@
package io.swagger.codegen.objc;

import io.swagger.codegen.CodegenModel;
import io.swagger.codegen.CodegenOperation;
import io.swagger.codegen.CodegenProperty;
import io.swagger.codegen.DefaultCodegen;
import io.swagger.codegen.*;
import io.swagger.codegen.languages.ObjcClientCodegen;
import io.swagger.models.ArrayModel;
import io.swagger.models.Model;
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.models.*;
import io.swagger.models.properties.*;
import io.swagger.parser.SwaggerParser;

import com.google.common.collect.Sets;
Expand Down Expand Up @@ -279,6 +267,20 @@ public void mapModelTest() {
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")
public void issue316Test() {
final Swagger model = new SwaggerParser().read("src/test/resources/2_0/postBodyTest.json");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -259,6 +259,7 @@ -(NSNumber*) requestWithPath: (NSString*) path
self.requestSerializer = [AFHTTPRequestSerializer serializer];
}
else {
self.requestSerializer = [AFHTTPRequestSerializer serializer];
NSAssert(NO, @"Unsupported request type %@", requestContentType);
}

Expand All @@ -274,7 +275,9 @@ -(NSNumber*) requestWithPath: (NSString*) path
queryParams = [self.sanitizer sanitizeForSerialization:queryParams];
headerParams = [self.sanitizer sanitizeForSerialization:headerParams];
formParams = [self.sanitizer sanitizeForSerialization:formParams];
body = [self.sanitizer sanitizeForSerialization:body];
if(![body isKindOfClass:[NSData class]]) {
body = [self.sanitizer sanitizeForSerialization:body];
}

// auth setting
[self updateHeaderParams:&headerParams queryParams:&queryParams WithAuthSettings:authSettings];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,21 @@ - (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request
withParameters:(id)parameters
error:(NSError *__autoreleasing *)error
{
if (!parameters) {
return request;
}
// If the body data which will be serialized isn't NSArray or NSDictionary
// then put the data in the http request body directly.
if ([parameters isKindOfClass:[NSArray class]] || [parameters isKindOfClass:[NSDictionary class]]) {
return [super requestBySerializingRequest:request withParameters:parameters error:error];
}
NSMutableURLRequest *mutableRequest = [request mutableCopy];
if([parameters isKindOfClass:[NSData class]]) {
[mutableRequest setHTTPBody:parameters];
} else {
NSMutableURLRequest *mutableRequest = [request mutableCopy];

if (parameters) {
[mutableRequest setHTTPBody:[parameters dataUsingEncoding:self.stringEncoding]];
}

return mutableRequest;
[mutableRequest setHTTPBody:[parameters dataUsingEncoding:self.stringEncoding]];
}
return mutableRequest;
}

@end