2007年7月2日月曜日

CocoaでWebServiceを利用する (動かない原因の一つへの対応)

追記:
 いつのまにか以下に移動していました.
 
/usr/bin/WSMakeStubs



WSDLファイルよりスタブのコードが作れます.
/Developer/Tools/WSMakeStubs -x ObjC -dir ${DIR} -name ${Classname} -url ${WSDL_URL}

DIR: コードができるディレクトリ(作っておかないと駄目)
Classname:Stubのクラス名
WSDL_URL: WSDLのURL

4つ作られる.WSGeneratedObj.h WSGeneratedObj.m ${Classname}.h ${Classname}.m

でCocoaApplicationのプロジェクトなどにこれをいれる.(Drug&Drop等)
(このとき“ディティネーショングループのフォルダに項目をコピーする(必要な場合)”にチェックをいれておくとプロジェクトのディレクトリにコピーされる.入れておかないと参照となる.)
#これだけで使える.簡単.

で上記Classnameクラスにスタティックメソッドでサービスができているのでそれを直接利用する.
id result= [Servicename service:param];

ServicenameはWSDLに記述されているものが入るので調べてw.
${Classname}.m中のスタティックメソッドを囲んでいる@implementationにある名称がそれ.

注意:”SOAPAction shall match 'uri#method'"というSOAP内エラーのため,戻り値がNULL/nilでerrorとなるケース
WSMakeStubsのTool version 0.2 (smz) において上記作成されるファイル中でWSGeneratedObj.mの174行目
NSString* soapAction = @"SOAPAction";

はせっかく引数で与えているsoapActionの値をつぶしてしまう.場合によってはコメントアウトが必要.
理由:http://homepage3.nifty.com/hippo2000/perltips/SOAP/Transport/HTTP.htm#DESCRIPTION のon_action()を読んでください.

参考:
ありがとうございました.
http://blog.livedoor.jp/gutskun/archives/7821879.html

0 件のコメント: