例外が発生した場合に SOAP エラーを返す応答があります。この SOAP Fault を処理したい。しかし、SOAP レスポンスをデシリアライズして取得したレスポンスには SOAP Fault がありません。
Sudzc Library を使用して、Web サービス用の目的の C コードを生成しました。
助けていただければ幸いです。
ありがとう、
プリヤ
Sudzc に同梱されている SoapRequest.m にバグがあるようです。
具体的に見てみると、
- (void)connectionDidFinishLoading:(NSURLConnection *)connection;
メソッドを開き、次のコードに移動します。
id output = nil;
SoapFault* fault = [SoapFault faultWithXMLDocument: doc];
if([fault hasFault]) {
if(self.action == nil) {
[self handleFault: fault];
} else {
if(self.handler != nil && [self.handler respondsToSelector: self.action]) {
[self.handler performSelector: self.action withObject: output];
} else {
NSLog(@"SOAP Fault: %@", fault);
}
}
}
ハンドラーに返されると、出力は常に nil になることがわかります。
この問題を解決するには、次のように出力の代わりに SoapFault をハンドラーに返すだけです。
...
[self.handler performSelector: self.action withObject: fault];
...
Sudzc return Handler Method では、[idOfSoapObject isKindOfClass:[SoapFault class]] を実行できます。
すでにこれを行っている場合は、Logging on をお勧めします。サービスには.logging
(BOOL) プロパティがあります。これにより、完全な SOAP 要求と応答がログに記録されます。ここで、エラーの応答を手動で確認できます。