1

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 : 私の英語でごめんなさい :/

4

1 に答える 1