プログラミング: 2011年2月アーカイブ

まあ、変数の二重宣言してしまった俺が悪いのですが(^^;

Visual Basic 2010 で、cat っていう文字列変数を

Dim cat As String

と宣言してるのに、For Each で配列から読み込んだデータの格納場所に変数 cat を指定した時に、

For Each cat As String In category

と、再度型宣言しちゃってた。

で、表示されたエラーの内容が「変数'cat'は、それを囲むブロック内の変数を非表示にします。」って・・・

意味わかんねえ。(^^;
「非表示」って?
元の英語メッセージがどんなものかわからないのでアレなんだけど、機械翻訳つーか、直訳しただけのメッセージなんだろうな。

俺も英語が全然出来ない人間なんだけど、エラーメッセージは下手に和訳せずに、英語のまま出してもらった方が分かり易い気がする今日この頃・・・

某 WebService に Perl プログラムから SOAP で接続する案件があった。

で、何度やっても VersionMismatch(SOAPエンベロープの名前空間が合わない・・・というエラー)が発生する。

なんか、SOAP::Lite モジュールではよくあることのようで、ググってたら SOAP::Data で明示的に SOAP要素に値、名前を指定してやったらOKになった・・・なんて記述もあったのでやってみたのだが、今度は namespace mismatch なエラーが。
つーか、これも名前空間が合わないってエラーじゃん。

エラー時に Only SOAP 1.1 or SOAP 1.2 messages are supported in the system って言われたので、SOAP v1.1 でずっと通信してたのだが、ここで、SOAP v1.2 での処理に変えてみると・・・

・・・あっけなく上手くいってしまった・・・

例えば、ID,Password を投げてユーザ情報を取ってくる処理なら、

use SOAP::Lite +trace;

my $client = SOAP::Lite->service('https://service.exsample.com/ServiceHandler?wsdl');

# SOAP 1.2 で接続
$client->soapversion('1.2');
$client->envprefix('soap12');
$client->readable('true');

$result = $client->getUserInfo('hogehoge', 'hogepass');

print "Name=" . $result->{'name'} . "\n";
print "Phone=" . $result->{'phone'} . "\n";
print "Address=" . $result->{'address'} . "\n";

みたいな感じ。

まあ、上手くいったので取りあえずはOKなのだが、SOAP v1.1 の時は何がいけなかったのか気になってしまう、45の冬。

このアーカイブについて

このページには、2011年2月以降に書かれたブログ記事のうちプログラミングカテゴリに属しているものが含まれています。

前のアーカイブはプログラミング: 2010年12月です。

次のアーカイブはプログラミング: 2011年3月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら