私は、クライアントの古いシステムを仮想化しようとしています。これは、SOAPを使用してフロントエンドからバックエンドにデータを渡し、再びデータを渡します。すべてのコードがCPANからインストールされた関連するPerlモジュールにコピーされています。Perl SOAPモジュールで「不正なフィールド名」をデバッグする最善の方法は何ですか?
Illegal field name 'APR::Table=HASH(0x7fe19a0c41e0)' at /usr/lib/perl5/site_perl/5.20.1/SOAP/Transport/HTTP2.pm line 103.
がerroringされる部分はラインで、これ一つであり、問題のモジュールを見る:SOAPコールがAPIログでこのエラーで、システムがクラッシュした場合、フロントエンドシステムのほとんどは、しかし作品103 do {}
ブロックさ:
my $cl = ($self->{'MOD_PERL_VERSION'} == 1) ?
$r->header_in('Content-length') : $r->headers_in->{'Content-length'};
$self->request(HTTP::Request->new(
$r->method() => $r->uri,
HTTP::Headers->new($r->headers_in),
do { my ($c,$buf); while ($r->read($buf,$cl)) { $c.=$buf; } $c; }
));
$self->SUPER::handle;
私はOO Perlの(私は、手続きの方法で考える)で少し苦労が、私の知る限り、それは方法がURIであるオブジェクトを作成し、その後にヘッダを構築していますdo{}
ループを追加して$c
に追加し、最後に$c
をオブジェクトに追加します。私はそれがループが戻っているフィールド名の1つまたはそれ以上が好きではないと仮定していますが、ループが出力されなかったので、$buf
変数を/ tmpのファイルに出力するデバッグを追加しようとしました。 。
私はこのアドバイスに遭遇しましたが(これはTransport :: HTTPとは関係ありませんが、Transport :: HTTP2では使用していません):https://www.tnpi.net/support/forums/index.php?topic=1037.0 HTTP :: Messageをバージョン6.04にダウングレードしましたが、残っている。
私は、どのように問題が実際に何かを見るためにいくつかのデバッグ出力を得る方法と、b)それを動作させる方法に関する提案がありますか?
Update 1の(最初の応答に応じる):そのため
ありがとう!
そのmy $data = do{}
セクションを好きにいないようでしたので、私はこれで行きました:以下の出力を生成
use Data::Dumper;
my ($data);
open (L1, ">>/tmp/testlog1.txt");
print L1 "Starting to dump data...\n";
my $method = $r->method();
print L1 "Dumping \$r\n" . Dumper($r);
print L1 "Dumping \$method\n" . Dumper($method);
my $uri = $r->uri;
print L1 "\$method = $method => $uri\n";
my $headers = HTTP::Headers->new($r->headers_in);
print L1 "Dumping headers\n" . Dumper($headers);
。
Starting to dump data...
Dumping $r
$VAR1 = bless(do{\(my $o = '140277572968608')}, 'Apache2::RequestRec');
Dumping $method
$VAR1 = 'POST';
$method = POST =>/
Dumping headers
$VAR1 = bless({}, 'HTTP::Headers');
変数に実際にその "bless"構造を含めるべきですか?
祝福構築物はperlで結合XSです:
は、私はこのような何か(
$self->request
文を置き換える)をしようとするだろう。 Perlオブジェクトではないオブジェクトをダンプするときは、完全に正常です。 $ r-> readからデータを取得してリクエストを作成しようとしましたか? – bolav