Bir istemci için en eski sanal sistemi sanallaştırmaya çalışıyorum. Bu, ön uçtan arka uca ve tekrar tekrar veri aktarmak için SOAP kullanır. Tüm kod kopyalanmış ve CPAN'dan yüklenen ilgili Perl modülleri kopyalanmıştır. Hat ile bu biridirPerl SOAP modülünde 'Yasa dışı alan adı' hatalarını ayıklamanın en iyi yolu nedir?
Illegal field name 'APR::Table=HASH(0x7fe19a0c41e0)' at /usr/lib/perl5/site_perl/5.20.1/SOAP/Transport/HTTP2.pm line 103.
erroring olduğu bölümde soru içinde modül baktığımızda: ön uç sisteminin çoğu bir SOAP çağrı API günlüklerinde bu hata ile, sistem çöker yapıldığında ancak işler Ben bildiğim kadarıyla o başlıkların yöntem URI bir nesne oluşturmak ve sonra da inşa ediyor söyleyebilirim OO Perl (ı usul şekillerde düşünün) fakat biraz mücadele
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;
: 103 do {}
blok olmak do{}
döngü, onları $c
ekleyerek ve son olarak nesneye $c
ekleyerek. Döngünün döndüğü alan adlarından birini veya daha fazlasını sevmediğimi varsayarak, $buf
değişkenini/tmp içindeki bir dosyaya yazdırmak için hata ayıklamayı eklediğimde, herhangi bir çıktı üretmedi .
Bu sorunu gidermeye çalışırken, bu tavsiyeye rastladım (bununla birlikte aktarım :: HTTP değil taşımayla ilgili: HTTP2 kullanıyoruz): https://www.tnpi.net/support/forums/index.php?topic=1037.0 HTTP :: Message 6.04 sürümüne düşürdüm, ancak hata kalır.
Yani a) aslında sorunun ne olduğunu görmek için bazı hata ayıklama çıktısı nasıl elde edilir, ve b) işe nasıl alınacağına dair herhangi bir öneri?
Güncelleme 1 (ilk cevap veren): Bunun için
Teşekkür!
O my $data = do{}
bölüm gibi görünmüyordu, bu yüzden bu gitti: Aşağıdaki çıktıyı üretti
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');
değişken gerçekten inşa "korusun" diye içermelidir?
korusun yapı perl'de bağlayıcı bir xs:
böyle bir şey (
$self->request
deyimi yerine) çalışacaktı. Perl nesnesi olmayan nesneleri döküldüğünde tamamen normaldir. Verileri $ r-> okumadan ve isteği oluşturmak için denediniz mi? – bolav