SOAP を使用して Web サービスを要求する iOS でアプリを開発していますが、データ型xsd:base64Binary (XML) に問題があります。
Web サービスから予想されるフィールドに従って、SOAP エンベロープを作成します。タイプがxsd:stringまたはxsd:integerまたはその他の単純なタイプの場合、問題はありません。しかし、 xsd:base64Binaryタイプを SOAP エンベロープに追加しようとすると、Web サービスはデータを正しく受信できません。エンコードの問題のようですが、わかりません。
たとえば、封筒は次のようになります。
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema- to instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<hereTheMethod xmlns="http://heretheaddress/">
<aBase64>/9j/4AAQSkZJRgAB...
...RRQAUUUUAf/Z</aBase64>
<aBool>false</aBool>
<anInt>89</anInt>
<aDouble>0.0</aDouble>
<aString>Hello</aString>
</hereTheMethod>
</soap12:Body>
</soap12:Envelope>
すると、Web サービスは "false"、"89"、"0.0"、または "Hello" を問題なく読み取ります。しかし、base64 では、エンコーディングの問題として「����JFIF��XExifMM*�i&...」のようなものがあります。
Objective-C では、次のように進めます。
NSMutableString *envelopeText = [NSMutableString stringWithFormat:@"(header)\n"
"<aBase64>%@</aBase64>\n"
"(footer)", base64String];
// Some code...
NSData *envelope = [envelopeText dataUsingEncoding:NSUTF8StringEncoding];
// I launch the connection.
最後に、base64 文字列を作成するときは、次のように UTF-8 でエンコードするように注意します。
NSString *base64String = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
Android (Java) 用のアプリも存在し、同じ Web サービスで正しく動作することに注意してください。
ご協力いただきありがとうございます !
PS : 私の英語でごめんなさい :/