Skip to content

Commit c19bd48

Browse files
author
Olga Danylova
authored
Merge pull request #214 from olgadanylova/master
Bug Fixes
2 parents 8aad325 + 284decb commit c19bd48

File tree

8 files changed

+70
-110
lines changed

8 files changed

+70
-110
lines changed

SDK/backendlessAPI/Classes/Persistence/MapDrivenDataStore.m

Lines changed: 16 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -143,9 +143,6 @@ -(NSArray *)find {
143143
if ([result isKindOfClass:[Fault class]]) {
144144
return [backendless throwFault:result];
145145
}
146-
for (NSMutableDictionary *dictionary in result) {
147-
[self setNullToNil:dictionary];
148-
}
149146
return (NSArray *)result;
150147
}
151148

@@ -158,9 +155,6 @@ -(NSArray *)find:(DataQueryBuilder *)queryBuilder {
158155
if ([result isKindOfClass:[Fault class]]) {
159156
return [backendless throwFault:result];
160157
}
161-
for (NSMutableDictionary *dictionary in (NSMutableArray *)result) {
162-
[self setNullToNil:dictionary];
163-
}
164158
NSArray *bc = (NSArray *)result;
165159
return [self fixClassCollection:bc];
166160
}
@@ -171,7 +165,7 @@ -(id)findFirst {
171165
if ([result isKindOfClass:[Fault class]]) {
172166
return [backendless throwFault:result];
173167
}
174-
return [result isKindOfClass:NSDictionary.class]?[self setNullToNil:(NSMutableDictionary *) result]:[self setNullToNil:(NSMutableDictionary *) [Types propertyDictionary:result]];
168+
return [result isKindOfClass:NSDictionary.class]?result:[Types propertyDictionary:result];
175169
}
176170

177171
-(id)findFirst:(DataQueryBuilder *)queryBuilder {
@@ -183,7 +177,7 @@ -(id)findFirst:(DataQueryBuilder *)queryBuilder {
183177
if ([result isKindOfClass:[Fault class]]) {
184178
return [backendless throwFault:result];
185179
}
186-
return [result isKindOfClass:NSDictionary.class]?[self setNullToNil:(NSMutableDictionary *) result]:[self setNullToNil:(NSMutableDictionary *) [Types propertyDictionary:result]];
180+
return [result isKindOfClass:NSDictionary.class]?result:[Types propertyDictionary:result];
187181
}
188182

189183
-(id)findLast {
@@ -192,7 +186,7 @@ -(id)findLast {
192186
if ([result isKindOfClass:[Fault class]]) {
193187
return [backendless throwFault:result];
194188
}
195-
return [result isKindOfClass:NSDictionary.class]?[self setNullToNil:(NSMutableDictionary *) result]:[self setNullToNil:(NSMutableDictionary *) [Types propertyDictionary:result]];
189+
return [result isKindOfClass:NSDictionary.class]?result:[Types propertyDictionary:result];
196190
}
197191

198192
-(id)findLast:(DataQueryBuilder *)queryBuilder {
@@ -204,7 +198,7 @@ -(id)findLast:(DataQueryBuilder *)queryBuilder {
204198
if ([result isKindOfClass:[Fault class]]) {
205199
return [backendless throwFault:result];
206200
}
207-
return [result isKindOfClass:NSDictionary.class]?[self setNullToNil:(NSMutableDictionary *) result]:[self setNullToNil:(NSMutableDictionary *) [Types propertyDictionary:result]];
201+
return [result isKindOfClass:NSDictionary.class]?result:[Types propertyDictionary:result];
208202
}
209203

210204
-(id)findById:(NSString *)objectId {
@@ -215,7 +209,7 @@ -(id)findById:(NSString *)objectId {
215209
if ([result isKindOfClass:[Fault class]]) {
216210
return [backendless throwFault:result];
217211
}
218-
return [self setNullToNil:result];
212+
return result;
219213
}
220214

221215
-(id)findById:(NSString *)objectId queryBuilder:(DataQueryBuilder *)queryBuilder {
@@ -229,7 +223,7 @@ -(id)findById:(NSString *)objectId queryBuilder:(DataQueryBuilder *)queryBuilder
229223
if ([result isKindOfClass:[Fault class]]) {
230224
return [backendless throwFault:result];
231225
}
232-
return [self setNullToNil:result];
226+
return result;
233227
}
234228

235229
-(NSNumber *)getObjectCount {
@@ -370,65 +364,45 @@ -(void)removeById:(NSString *)objectId response:(void(^)(NSNumber *))responseBlo
370364
-(void)find:(void(^)(NSArray *))responseBlock error:(void(^)(Fault *))errorBlock {
371365
NSArray *args = @[_tableName, [DataQueryBuilder new]];
372366
Responder *responder = [ResponderBlocksContext responderBlocksContext:responseBlock error:errorBlock];
373-
Responder *_responder = [Responder responder:self selResponseHandler:@selector(onFind:) selErrorHandler:nil];
374-
_responder.chained = responder;
375-
[invoker invokeAsync:SERVER_PERSISTENCE_SERVICE_PATH method:METHOD_FIND args:args responder:_responder responseAdapter:[MapAdapter new]];
367+
[invoker invokeAsync:SERVER_PERSISTENCE_SERVICE_PATH method:METHOD_FIND args:args responder:responder responseAdapter:[MapAdapter new]];
376368
}
377369

378370
-(void)find:(DataQueryBuilder *)queryBuilder response:(void(^)(NSArray *))responseBlock error:(void(^)(Fault *))errorBlock {
379371
NSArray *args = @[_tableName, [queryBuilder build]];
380372
Responder *responder = [ResponderBlocksContext responderBlocksContext:responseBlock error:errorBlock];
381-
Responder *_responder = [Responder responder:self selResponseHandler:@selector(onFind:) selErrorHandler:nil];
382-
_responder.chained = responder;
383-
[invoker invokeAsync:SERVER_PERSISTENCE_SERVICE_PATH method:METHOD_FIND args:args responder:_responder responseAdapter:[MapAdapter new]];
373+
[invoker invokeAsync:SERVER_PERSISTENCE_SERVICE_PATH method:METHOD_FIND args:args responder:responder responseAdapter:[MapAdapter new]];
384374
}
385375

386376
-(void)findFirst:(void(^)(id))responseBlock error:(void(^)(Fault *))errorBlock {
387377
NSArray *args = @[_tableName];
388378
Responder *responder = [ResponderBlocksContext responderBlocksContext:responseBlock error:errorBlock];
389-
Responder *_responder = [Responder responder:self selResponseHandler:@selector(onFind:) selErrorHandler:nil];
390-
_responder.chained = responder;
391-
[invoker invokeAsync:SERVER_PERSISTENCE_SERVICE_PATH method:METHOD_FIRST args:args responder:_responder responseAdapter:[MapAdapter new]];
379+
[invoker invokeAsync:SERVER_PERSISTENCE_SERVICE_PATH method:METHOD_FIRST args:args responder:responder responseAdapter:[MapAdapter new]];
392380
}
393381

394382
-(void)findFirst:(DataQueryBuilder *)queryBuilder response:(void(^)(id))responseBlock error:(void(^)(Fault *))errorBlock {
395383
NSArray *args = @[_tableName, [queryBuilder getRelated]?[queryBuilder getRelated]:@[], [queryBuilder getRelationsDepth]?[queryBuilder getRelationsDepth]:[NSNull null], [queryBuilder getProperties]];
396384
Responder *responder = [ResponderBlocksContext responderBlocksContext:responseBlock error:errorBlock];
397-
Responder *_responder = [Responder responder:self selResponseHandler:@selector(onFind:) selErrorHandler:nil];
398-
_responder.chained = responder;
399-
[invoker invokeAsync:SERVER_PERSISTENCE_SERVICE_PATH method:METHOD_FIRST args:args responder:_responder responseAdapter:[MapAdapter new]];
385+
[invoker invokeAsync:SERVER_PERSISTENCE_SERVICE_PATH method:METHOD_FIRST args:args responder:responder responseAdapter:[MapAdapter new]];
400386
}
401387

402388
-(void)findLast:(void(^)(id))responseBlock error:(void(^)(Fault *))errorBlock {
403389
NSArray *args = @[_tableName];
404390
Responder *responder = [ResponderBlocksContext responderBlocksContext:responseBlock error:errorBlock];
405-
Responder *_responder = [Responder responder:self selResponseHandler:@selector(onFind:) selErrorHandler:nil];
406-
_responder.chained = responder;
407-
[invoker invokeAsync:SERVER_PERSISTENCE_SERVICE_PATH method:METHOD_LAST args:args responder:_responder responseAdapter:[MapAdapter new]];
391+
[invoker invokeAsync:SERVER_PERSISTENCE_SERVICE_PATH method:METHOD_LAST args:args responder:responder responseAdapter:[MapAdapter new]];
408392
}
409393

410394
-(void)findLast:(DataQueryBuilder *)queryBuilder response:(void(^)(id))responseBlock error:(void(^)(Fault *))errorBlock {
411395
NSArray *args = @[_tableName, [queryBuilder getRelated]?[queryBuilder getRelated]:@[], [queryBuilder getRelationsDepth]?[queryBuilder getRelationsDepth]:[NSNull null], [queryBuilder getProperties]];
412396
Responder *responder = [ResponderBlocksContext responderBlocksContext:responseBlock error:errorBlock];
413-
Responder *_responder = [Responder responder:self selResponseHandler:@selector(onFind:) selErrorHandler:nil];
414-
_responder.chained = responder;
415-
[invoker invokeAsync:SERVER_PERSISTENCE_SERVICE_PATH method:METHOD_LAST args:args responder:_responder responseAdapter:[MapAdapter new]];
397+
[invoker invokeAsync:SERVER_PERSISTENCE_SERVICE_PATH method:METHOD_LAST args:args responder:responder responseAdapter:[MapAdapter new]];
416398
}
417399

418400
-(void)findById:(NSString *)objectId response:(void(^)(id))responseBlock error:(void(^)(Fault *))errorBlock {
419-
void(^wrappedBlock)(id) = ^(id dict) {
420-
dict = [self setNullToNil:dict];
421-
responseBlock(dict);
422-
};
423-
[backendless.persistenceService findById:_tableName objectId:objectId response:wrappedBlock error:errorBlock responseAdapter:[MapAdapter new]];
401+
[backendless.persistenceService findById:_tableName objectId:objectId response:responseBlock error:errorBlock responseAdapter:[MapAdapter new]];
424402
}
425403

426404
-(void)findById:(NSString *)objectId queryBuilder:(DataQueryBuilder *)queryBuilder response:(void(^)(id))responseBlock error:(void(^)(Fault *))errorBlock {
427-
void(^wrappedBlock)(id) = ^(id dict) {
428-
dict = [self setNullToNil:dict];
429-
responseBlock(dict);
430-
};
431-
[backendless.persistenceService findById:_tableName objectId:objectId queryBuilder:queryBuilder response:wrappedBlock error:errorBlock responseAdapter:[MapAdapter new]];
405+
[backendless.persistenceService findById:_tableName objectId:objectId queryBuilder:queryBuilder response:responseBlock error:errorBlock responseAdapter:[MapAdapter new]];
432406
}
433407

434408
-(void)getObjectCount:(void(^)(NSNumber *))responseBlock error:(void(^)(Fault *))errorBlock {
@@ -482,17 +456,6 @@ -(void)loadRelations:(NSString *)objectId queryBuilder:(LoadRelationsQueryBuilde
482456
[invoker invokeAsync:SERVER_PERSISTENCE_SERVICE_PATH method:LOAD_RELATION args:args responder:chainedResponder responseAdapter:[MapAdapter new]];
483457
}
484458

485-
-(NSMutableDictionary *)setNullToNil:(NSMutableDictionary *)dictionary {
486-
if ([dictionary isKindOfClass:[NSDictionary class]] || [dictionary isKindOfClass:[NSMutableDictionary class]]) {
487-
for (NSString *key in [dictionary allKeys]) {
488-
if ([[dictionary valueForKey:key] isKindOfClass:[NSNull class]]) {
489-
dictionary[key] = nil;
490-
}
491-
}
492-
}
493-
return dictionary;
494-
}
495-
496459
-(void)createBulk:(NSArray<NSString *> *)objects response:(void(^)(NSArray<NSString *> *))responseBlock error:(void(^)(Fault *))errorBlock {
497460
Responder *responder = [ResponderBlocksContext responderBlocksContext:responseBlock error:errorBlock];
498461
if (!objects) {
@@ -505,29 +468,13 @@ -(void)createBulk:(NSArray<NSString *> *)objects response:(void(^)(NSArray<NSStr
505468
-(void)updateBulk:(NSString *)whereClause changes:(NSDictionary<NSString *,id> *)changes response:(void(^)(NSNumber *))responseBlock error:(void(^)(Fault *))errorBlock {
506469
NSArray *args = @[_tableName, whereClause, changes];
507470
Responder *responder = [ResponderBlocksContext responderBlocksContext:responseBlock error:errorBlock];
508-
Responder *_responder = [Responder responder:self selResponseHandler:@selector(onFind:) selErrorHandler:nil];
509-
_responder.chained = responder;
510-
[invoker invokeAsync:SERVER_PERSISTENCE_SERVICE_PATH method:UPDATE_BULK args:args responder:_responder];
471+
[invoker invokeAsync:SERVER_PERSISTENCE_SERVICE_PATH method:UPDATE_BULK args:args responder:responder];
511472
}
512473

513474
- (void)removeBulk:(NSString *)whereClause response:(void(^)(NSNumber *))responseBlock error:(void(^)(Fault *))errorBlock {
514475
NSArray *args = @[_tableName, whereClause];
515476
Responder *responder = [ResponderBlocksContext responderBlocksContext:responseBlock error:errorBlock];
516-
Responder *_responder = [Responder responder:self selResponseHandler:@selector(onFind:) selErrorHandler:nil];
517-
_responder.chained = responder;
518-
[invoker invokeAsync:SERVER_PERSISTENCE_SERVICE_PATH method:REMOVE_BULK args:args responder:_responder];
519-
}
520-
521-
-(id)onFind:(id)response {
522-
if ([response isKindOfClass:[NSArray class]]) {
523-
for (NSMutableDictionary *dictionary in (NSMutableArray *)response) {
524-
[self setNullToNil:dictionary];
525-
}
526-
}
527-
else if ([response isKindOfClass:[NSDictionary class]]) {
528-
[self setNullToNil:response];
529-
}
530-
return response;
477+
[invoker invokeAsync:SERVER_PERSISTENCE_SERVICE_PATH method:REMOVE_BULK args:args responder:responder];
531478
}
532479

533480
@end

SDK/backendlessAPI/Classes/weborb/Client/HttpEngine.m

Lines changed: 52 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -137,35 +137,44 @@ -(NSData *)createRequest:(V3Message *)v3Msg {
137137
return [self createRequest:v3Msg headers:nil];
138138
}
139139

140-
-(void)processAsyncAMFResponse:(AsyncHttpResponse *)async {
141-
id <IResponder> responder = (async.responder) ? async.responder : _responder;
142-
int statusCode = (int)[async.responseUrl statusCode];
143-
if (statusCode != 200) {
144-
[DebLog log:@"HttpEngine -> sendRequest: (SYNC) response with *** INVALID statusCode = '%d'", statusCode];
145-
NSString *code = [NSString stringWithFormat:@"%d", statusCode];
146-
NSString *detail = [NSString stringWithFormat:@"HttpEngine: INVALID statusCode %d", statusCode];
147-
[responder errorHandler:[Fault fault:detail detail:detail faultCode:code]];
148-
return;
149-
}
150-
151-
NSString *contentType = [[async.responseUrl allHeaderFields] valueForKey:@"Content-Type"];
152-
if (!(contentType) || ![contentType isEqualToString:@"application/x-amf"]) {
153-
NSString *body = [[NSString alloc] initWithData:async.receivedData encoding:NSUTF8StringEncoding];
154-
[DebLog log:@"HttpEngine -> processAsyncAMFResponse: response with *** INVALID 'Content-Type' = '%@', body = '%@'", contentType, body];
155-
Fault *fault = [Fault fault:@"HttpEngine: INVALID response 'Content-Type'" detail:contentType faultCode:@"9000"];
156-
[responder errorHandler:fault];
157-
return;
158-
}
159-
FlashorbBinaryReader *reader = [[FlashorbBinaryReader alloc] initWithStream:(char *)[async.receivedData bytes] andSize:[async.receivedData length]];
160-
[DebLog log:ON_PRINT_RESPONSE text:@"HttpEngine -> processAsyncAMFResponse: (ASYNC RESPONSE)\n"];
161-
[reader print:ON_PRINT_RESPONSE];
162-
Request *responseObject = [RequestParser readMessage:reader];
163-
NSArray *responseData = [responseObject getRequestBodyData];
164-
id <ICacheableAdaptingType> type = [responseData objectAtIndex:0];
140+
-(void)processAsyncAMFResponse:(AsyncHttpResponse *)async processIfNeeded:(BOOL)processNeeded {
141+
if (processNeeded) {
142+
id <IResponder> responder = nil;
143+
if (async.responder) {
144+
responder = async.responder;
145+
}
146+
else {
147+
responder = _responder;
148+
}
149+
int statusCode = (int)[async.responseUrl statusCode];
150+
if (statusCode != 200) {
151+
[DebLog log:@"HttpEngine -> sendRequest: (SYNC) response with *** INVALID statusCode = '%d'", statusCode];
152+
NSString *code = [NSString stringWithFormat:@"%d", statusCode];
153+
NSString *detail = [NSString stringWithFormat:@"HttpEngine: INVALID statusCode %d", statusCode];
154+
[responder errorHandler:[Fault fault:detail detail:detail faultCode:code]];
155+
return;
156+
}
157+
158+
NSString *contentType = [[async.responseUrl allHeaderFields] valueForKey:@"Content-Type"];
159+
if (!(contentType) || ![contentType isEqualToString:@"application/x-amf"]) {
160+
NSString *body = [[NSString alloc] initWithData:async.receivedData encoding:NSUTF8StringEncoding];
161+
[DebLog log:@"HttpEngine -> processAsyncAMFResponse: response with *** INVALID 'Content-Type' = '%@', body = '%@'", contentType, body];
162+
Fault *fault = [Fault fault:@"HttpEngine: INVALID response 'Content-Type'" detail:contentType faultCode:@"9000"];
163+
[responder errorHandler:fault];
164+
return;
165+
}
166+
167+
FlashorbBinaryReader *reader = [[FlashorbBinaryReader alloc] initWithStream:(char *)[async.receivedData bytes] andSize:[async.receivedData length]];
168+
[DebLog log:ON_PRINT_RESPONSE text:@"HttpEngine -> processAsyncAMFResponse: (ASYNC RESPONSE)\n"];
169+
[reader print:ON_PRINT_RESPONSE];
170+
Request *responseObject = [RequestParser readMessage:reader];
171+
NSArray *responseData = [responseObject getRequestBodyData];
172+
id <ICacheableAdaptingType> type = [responseData objectAtIndex:0];
165173
#if _ReaderReferenceCache_IS_SINGLETON_
166-
[[ReaderReferenceCache cache] cleanCache];
174+
[[ReaderReferenceCache cache] cleanCache];
167175
#endif
168-
[responder responseHandler:type];
176+
[responder responseHandler:type];
177+
}
169178
}
170179

171180
-(void)pollingResponse:(id)result {
@@ -237,7 +246,6 @@ -(id)invoke:(NSString *)className method:(NSString *)methodName args:(NSArray *)
237246
}
238247

239248
-(id)sendRequest:(V3Message *)v3Msg {
240-
241249
NSHTTPURLResponse *responseUrl;
242250
NSError *error = nil;
243251
NSData *receivedData;
@@ -298,16 +306,10 @@ -(void)sendURLRequest:(NSURLRequest *)request responder:(id <IResponder>)respond
298306
AsyncHttpResponse *async = [[AsyncHttpResponse alloc] init];
299307
async.receivedData = [NSMutableData new];
300308
async.responder = responder;
301-
if (response) {
302-
NSHTTPURLResponse *responseUrl = (NSHTTPURLResponse *)response;
303-
[async.receivedData setLength:0];
304-
async.responseUrl = responseUrl;
305-
}
306-
if (data) {
307-
[DebLog logN:@"HttpEngine ->connection didReceiveData: length = %d", [data length]];
308-
[async.receivedData appendData:data];
309-
}
309+
BOOL processNeeded = YES;
310+
310311
if (error) {
312+
processNeeded = NO;
311313
[self setNetworkActivityIndicatorOn:NO];
312314
#if REPEAT_REQUEST_ON
313315
if ([self isNSURLErrorDomain:error] && async.request) {
@@ -319,7 +321,18 @@ -(void)sendURLRequest:(NSURLRequest *)request responder:(id <IResponder>)respond
319321
Fault *fault = (error) ? [Fault fault:[error domain] detail:[error localizedDescription] faultCode:[NSString stringWithFormat:@"%ld",(long)[error code]]] : UNKNOWN_FAULT;
320322
[async.responder errorHandler:fault];
321323
}
322-
[self processAsyncAMFResponse:async];
324+
else {
325+
if (response) {
326+
NSHTTPURLResponse *responseUrl = (NSHTTPURLResponse *)response;
327+
[async.receivedData setLength:0];
328+
async.responseUrl = responseUrl;
329+
}
330+
if (data) {
331+
[DebLog logN:@"HttpEngine ->connection didReceiveData: length = %d", [data length]];
332+
[async.receivedData appendData:data];
333+
}
334+
}
335+
[self processAsyncAMFResponse:async processIfNeeded:processNeeded];
323336
}] resume];
324337
}
325338

@@ -370,7 +383,7 @@ - (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NS
370383
blockResponse = subResponse;
371384
dispatch_group_leave(group);
372385
}] resume];
373-
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
386+
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
374387
*error = blockError;
375388
*response = blockResponse;
376389
} @catch (NSException *exception) {

0 commit comments

Comments
 (0)