Как передать массивы значений в сгенерированные SudzC классы веб-сервиса? - PullRequest
4 голосов
/ 09 февраля 2011

У меня есть класс обслуживания sudzc, сгенерированный из WSDL, который принимает объекты ArrayOfInt и ArrayOfString в качестве параметров.Сигнатура метода службы такова:

- (SoapRequest*) Search: (id <SoapDelegate>) handler filters: (NSMutableArray*) displayedAttributes: (NSMutableArray*) displayedAttributes;

У меня вопрос: как передать значения в параметры, ожидающие NSMutableArrays?

В приведенной выше сигнатуре метода параметр "displayAttributes"ожидание объекта ArrayOfInt (который должен быть заполнен несколькими целыми числами в теге int, например, <int>1</int><int>2</int><int>3</int> и т. д.).

Однако ни одна из этих вещей, которые я пробовал, не сработала:

  • Непосредственная передача NSArray / NSMutableArray (int) объектов
  • Непосредственная передача NSArray / NSMutableArray объектов NSNumber
  • Передача массива строк, содержащих @ "1", @ "2 ", @" 3 "и т. Д.
  • Передача массива строк, которые уже содержат @"<int>1</int>", @"<int>2</int>" и т. Д.
  • Создание CXMLDocument из строки на основе целых чисел

Я уверен, что это как-то объясняется в сопроводительной документации в загрузке - на данный момент мне просто не понятно.

Ответы [ 3 ]

1 голос
/ 03 мая 2012

@ Jon Limjap: Счастливчик! он спрашивает вас о типе, который вы имели дело ранее, у меня есть пользовательский тип класса, который SudzC сгенерировал для меня (!) ... Он инициализируется только при передаче CXMLNode (который требует CXMLDocument / CXMLElement) .. Я понятия не имею, как иметь дело с таким типом ...

пример: filter - это класс, у меня есть класс фильтра, но нет способа его инициализировать (кроме alloc-init и затем установки его свойств, но его свойства - еще один такой пользовательский тип). !!!!) ... Если вы знаете какой-нибудь «трюк», чтобы сказать / настроить sudzc, чтобы позволить нам передавать объекты или выбирать объекты типа какао, сообщите мне ....

0 голосов
/ 08 марта 2012

Это немного устарело, но я надеюсь, что это кому-нибудь поможет.Я реализовал метод serialize: в SoapArray следующим образом:

- (NSMutableString *)serialize:(NSString *)name
{
    NSMutableString *str = [NSMutableString string];
    //[str appendFormat:@"<%@>", name];
    for (id content in self)
    {
        //[str appendString:[Soap serialize:content]];
        [str appendString:[Soap serialize:content withName:name]];
    }
    //[str appendFormat:@"</%@>", name];
    return str;
}

Как видите, есть несколько закомментированных строк.Если вы раскомментируете их и прокомментируете текущий, используемый внутри, для for, вы получите тег с именем name, который будет содержать объекты, помеченные именем класса содержимого.

0 голосов
/ 10 марта 2011

У меня была похожая ситуация передачи массива объектов в запросе SOAP. Мне удалось заставить его работать, сделав следующие изменения.

Случай массива SOAP не добавлен в

+(NSString *) serialize: (id) object()
{
//look if it is array not implemented
}

, поэтому мне удалось изменить следующий метод

+ (NSString*) serialize: (id) object withName: (NSString*) nodeName {
    if([object respondsToSelector:@selector(serialize:)]) {
        if([object isKindOfClass:[SoapArray class]]) 
            return [object serialize:object];
        return [object serialize: nodeName];
    }
    NSString *temp =[NSString stringWithFormat:@"<%@>%@</%@>", nodeName, [Soap serialize: object], nodeName];
    NSLog(@"serialise = %@", temp);
    return temp;
}

на момент запроса SOAP,

NSMutableArray arr = [[MYTable_STUB_ARR alloc] init]

MYTABLE_OBJ *obj = [[MYTABLE_OBJ alloc] init];

[arr addObject:obj];

[obj release];

Передать элемент arr объект вашего SOAP-запроса ??

...