少なくとも、生成されたXMLコードを印刷する方法が見つかりました。
まず、raina77owが提案したように、SOAP::WSDL::Clientを見ました。しかし、それは私が必要なものではありませんでした。しかし、私はSOAP::WSDL::Factory::Serializerを見つけました。そこでは、それは言う:
シリアライザオブジェクトもset_serializerメソッドを使用して、WSDL ::クライアント :: SOAPに直接渡すことができます。
少しそわそわと私はSOAP::WSDLで使用されるデフォルトのシリアライザですSOAP::WSDL::Serializer::XSDのラッパークラスを思い付きました。コードを見ても助かりました。
ここに私が書いたモジュールがあります。これはSOAP::WSDL::Serializer::XSD
を基本クラスとして使用し、new
とserialize
のメソッドをオーバーロードします。引数はnew
にしか渡されませんが、返されたXMLはserialize
から取得され、デバッグには十分です。私はそれをどこからでも簡単に入手できる方法があるかどうかはわかりません。
my $serializer = MySerializer->new();
$self->{'_interface'} = Lib::Interfaces::MyInterface->new();
$self->{'_interface'}->set_serializer($serializer); # comment out to deactivate
それは無効化するのは簡単です:
package MySerializer;
use strict;
use warnings;
use base qw(SOAP::WSDL::Serializer::XSD);
sub new {
my $self = shift;
my $class = ref($self) || $self;
return $self if ref $self;
# Create the base object and return it
my $base_object = $class->SUPER::new(@_);
return bless ($base_object, $class);
}
sub serialize {
my ($self, $args_of_ref) = @_;
# This is basically a wrapper function that calls the real Serializer's
# serialize-method and grabs and prints the returned XML before it
# giving it back to the caller
my $xml = ref($self)->SUPER::serialize($args_of_ref);
print "\n\n$xml\n\n"; # here we go
return $xml;
}
1;
そして、ここでは、私はそれを呼び出す方法です。 set_serializer
行にのみコメントを入力してください。
もちろん、XMLのブロックをコマンドラインに印刷することはあまり美しいものではありませんが、ジョブは完了します。私はそれを必要としているが、なぜコーディング/テストなので、これはうまくいくと思う。
モジュールは分かっていませんが、Data :: DumperまたはData :: Dumpでオブジェクト全体をダンプしようとしましたか? Dumper $ soap_resを印刷するだけです。 .. –
@ØyvindSkaar: 'SOAP :: WSDL'が作成するすべてのオブジェクトが' Class :: Std :: Fast :: Storable'オブジェクトであるため、動作しません。ダンプすると、$ VAR1 = bless(do {\(my $ o = 157)}、 'SOAP :: WSDL :: SOAP :: Typelib :: Fault11'); ' – simbabque