Цель C - sudzc, возвращает пустой ArrayOfString, но ответ xml содержит данные - PullRequest
1 голос
/ 08 февраля 2012

Я новичок в Objective C. Я пытаюсь использовать веб-сервис с sudcz. Я получил и сервер Webservice создал в PHP MySQL, и теперь я хотел бы общаться с сервером и получать соответствующие результаты.

При вызове метода я получаю от сервера ответ corrent XML, но возвращаемый объект типа ArrayOfString кажется пустым. NSLog печатает только , я предполагаю, что sudzc не был способен анализировать xml в апропориатную форму, поэтому возвращаемый объект пуст, я не прав? или я просто не могу увидеть или справиться с возвращенным объектом? У кого-нибудь есть подсказка?

Если понадобятся какие-либо материалы, я их опубликую. Спасибо.

Добавлено:

    CXMLElementNode* element = [[Soap getNode: [doc rootElement] withName: @"Body"] childAtIndex:0];
    if(deserializeTo == nil) {

        output = [Soap deserialize:element];

    } else {
                    NSLog(@"Deserialize to : %@", deserializeTo);
        if([deserializeTo respondsToSelector: @selector(initWithNode:)]) 
                            //problematic section
                            element = [element childAtIndex:0];
                            NSLog(@"NSSstring element : %@", element);
            output = [deserializeTo initWithNode: element];

                  } else {

            NSString* value = [[[element childAtIndex:0] childAtIndex:0] stringValue];
                            NSLog(@"NSSstring value : %@", value);
            output = [Soap convert: value toType: deserializeTo];
        }
           NSLog(@"output : %@", output);
    }

Я думаю, что проблемный раздел - то, куда я помещал комментарии проблемного раздела. Поскольку элемент object является элементом xml, и после вызова output = [deserializeTo initWithNode: element] ничего не происходит, NSLog (выход) печатает тот же вывод, что и напечатанный NSLog (deserializeTo), перед вызовом сообщения initWithNode: элемент объекта deserializeTo Я подозреваю, что метод экземпляра SoapObject initWithNode не работает должным образом, потому что мой deserializeTo является экземпляром класса RSiArrayOfstring a, этот класс является подмножеством SoapObject, и он делегирует это сообщение родительскому классу (SoapObject), а реализация этого сообщения в SoapObject:

// Called when initializing the object from a node
- (id) initWithNode: (CXMLNode*) node {
    if(self = [self init]) {
    }
    return self;
}

Я не вижу никаких манипуляций с аргументом узла

ВЫХОД из отладчика во время выполнения этого кода:

2012-02-08 20:22:03.166 URS[1170:b603] Deserialize to : <ArrayOfstring></ArrayOfstring>
2012-02-08 20:23:17.258 URS[1170:b603] NSSstring element : &lt;CXMLElement 0x5d7b920 [0x59701b0] return &lt;return arrayType="SOAP-ENC:Array[6]" type="SOAP-ENC:Array">&lt; item arrayType="xsd:string[1]" type="SOAP-ENC:Array">&lt; item type="xsd:string">1 - Elektroúdržba&lt;/item>&lt; /item>&lt; item arrayType="xsd:string[1]" type="SOAP-ENC:Array">&lt; item type="xsd:string">2 - Zámočnícka dielňa&lt; /item>&lt; /item>&lt; item arrayType="xsd:string[1]" type="SOAP-ENC:Array">&lt; item type="xsd:string">3 - Údržba žeriavov</item>&lt; /item>&lt; item arrayType="xsd:string[1]" type="SOAP-ENC:Array">&lt; item type="xsd:string">6 - Zámočnícká dielňa H4&lt; /item>&lt; /item>&lt; item arrayType="xsd:string[1]" type="SOAP-ENC:Array">&lt; item type="xsd:string">4 - Mechanici&lt; /item>&lt; /item>&lt; item arrayType="xsd:string[1]" type="SOAP-ENC:Array">&lt; item type="xsd:string">5 - Údržba CNC&lt; /item>&lt; /item>&lt; /return>>
2012-02-08 20:56:11.353 URS[1170:b603] output : &lt; ArrayOfstring>&lt; /ArrayOfstring 

1 Ответ

2 голосов
/ 22 июля 2012

Привет, я только что столкнулся с той же проблемой.

Я обнаружил, что

[[Soap getNode: [doc rootElement] withName: @"Body"]

опускает пространство имен тегов.Так что в моем случае часть XML выглядит так:

<SOAP-ENV:Body>....

Изменение строки выше на:

[[Soap getNode: [doc rootElement] withName: @"SOAP-ENV:Body"]

помогло в моем случае.Хотя я не уверен, варьируется ли пространство имен для разных реализаций мыла.

ура!

...