Сериализация строки Base64 в полезной нагрузке JSON с помощью HessianKit (Objective-C/Cocoa)

Я пытаюсь подключить свое iOS-приложение к существующему внутреннему серверу Grails. Бэкэнд предоставляет гессенский веб-сервис с помощью плагина удаленного взаимодействия Grails (версия 1.3). Мое приложение для Android успешно вызывает все методы веб-сервиса.

Моя цель - передать изображение jpeg с телефона на сервер (работает с приложением Android). Мой подход состоит в том, чтобы создать объект JSON с помощью JSONKit и включить изображение в виде строки в кодировке base64. Я использую HessianKit в проекте XCode 4 с ARC для iOS 4.2 и категориями Ника Локвуда NSData+Base64 для кодирования Base64 (https://github.com/nicklockwood/Base64).

Вот мой код:

NSMutableDictionary *jsonPayload = [NSMutableDictionary dictionary];
[jsonPayload setObject:[theImage base64EncodedString] forKey:@"photo"];
NSString* jsonString = [jsonPayload JSONString];

NSURL* url = server_URL;
id<BasicAPI> proxy = (id<BasicAPI>)[CWHessianConnection proxyWithURL:url protocol:@protocol(BasicAPI)];
[proxy addImage:jsonString];  

Проблема в том, что сервер вызывает исключение при вызове приложения:

threw exception [Hessian skeleton invocation failed; nested exception is com.caucho.hessian.io.HessianProtocolException: addImage__1: expected string at 0x7b ({)] with root cause
Message: addImage__1: expected string at 0x7b ({)
    Line | Method
->> 1695 | error      in com.caucho.hessian.io.HessianInput
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|   1681 | expect     in     ''
|   1473 | parseChar  in     ''
|    792 | readString in     ''
|    181 | readObject in com.caucho.hessian.io.BasicDeserializer
|   1078 | readObject in com.caucho.hessian.io.HessianInput
|    300 | invoke . . in com.caucho.hessian.server.HessianSkeleton
|    221 | invoke     in     ''
|    886 | runTask .  in java.util.concurrent.ThreadPoolExecutor$Worker
|    908 | run        in     ''
^    680 | run . . .  in java.lang.Thread

Все другие полезные нагрузки JSON из моего приложения (строки, даты, числа и т. Д.) Могут быть десериализованы сервером без каких-либо проблем и наоборот, то есть отправка изображения в кодировке base64 в виде полезной нагрузки json в приложение с сервера в качестве ответа тоже работает.

Потратив часы на чтение отчетов об ошибках и списков рассылки, я подозреваю, что проблема может заключаться в том, что HessianKit поддерживает только протокол Hessian 1, но версия гессиана, поставляемая с remoting 1.3, - это 4.0.7. 4.0.7, вероятно, использует протокол Hessian 2 и не совместим в обратном направлении. Но это только предположение.

РЕДАКТИРОВАТЬ: На самом деле, проблема не имеет ничего общего с JSON. Такое же исключение выдается, когда я просто передаю строку как обычную строку (а не встроенную в JSON) в веб-сервис.

Кто-нибудь сталкивался с подобной проблемой и знает решение?

0 ответов

Другие вопросы по тегам