我找到了一種方法來至少打印出生成的XML代碼。
首先,我看着SOAP::WSDL::Client as raina77ow建議。雖然這不是我所需要的。但後來我碰到了SOAP::WSDL::Factory::Serializer。在那裏,它說:
串行器對象也可以通過使用set_serializer方法直接傳遞給SOAP :: WSDL :: Client 。
有點坐立不安,我想出了一個包裝類SOAP::WSDL::Serializer::XSD這是SOAP::WSDL使用默認的序列。代碼看起來也有幫助。
這是我寫的模塊。它使用SOAP::WSDL::Serializer::XSD
作爲基類,並重載new
和serialize
方法。雖然它僅將參數傳遞給new
,但它會從serialize
獲取返回的XML並將其打印出來,這足以進行調試。我不確定是否有辦法將它放在我可以輕易從中獲得的地方。
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;
這裏就是我把它叫做:
my $serializer = MySerializer->new();
$self->{'_interface'} = Lib::Interfaces::MyInterface->new();
$self->{'_interface'}->set_serializer($serializer); # comment out to deactivate
這很容易解除。只在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