Why not adopt me?
NAME
POE::Component::Client::SOAP
SYNOPSIS
# (1) Derive you own client class
package My::SOAP;
use base qw(POE::Component::Client::SOAP);
sub spawn{
  my $package = shift;
  my $proxy = shift;
  my $service = shift;
  my $self = $class->SUPER::spawn(
       retry_reconnect => 1,
       proxy => $proxy,
       service => $service,
  );
  # initialized flag
  $self->{soc_stat} = 0;
  return $self;
}
# override connected method for status, for example
sub handle_connected {
  my ($kernel, $self, $frame) = @_[KERNEL,OBJECT,ARG0];
  # marks stomp client as initialized
  $self->{soc_stat} = 1;
}
# this must be overriden; it's the result from the call
sub handle_result {
  my ($kernel, $self, $result) = @_[KERNEL,OBJECT,ARG0];
  # post to your session, or do whatever with SOAP result....
  $kernel->post($your_session, $call_back_event, $result);
  # result contains the SOAP call name and data
}
# usually overriden
sub log {
  my ($self, $kernel, $level, $message) = @_;
}
sub handle_error {
  my ($kernel, $self, $result) = @_[KERNEL,OBJECT,ARG0];
  $self->{soc_stat} = 0;
  $kernel->post($your_session,$error_call_back_event, $result);
  # result contains the SOAP call name and error data
}
# (2) use it in the actual implementation
use My::SOAP;
my $soap = My::SOAP->spawn(
  proxy => 'http://your.soap.server',
  service = > 'http://your.soap.server/service.wsdl',
)
$soap->soapCall(params);
...
sub call_back_event_handler{
  my ( $self, $kernel, $session, $soc_ret ) = @_[ OBJECT, KERNEL, SESSION, ARG0 ];
  $call  = $soc_ret->[0]; # which SOAP call is returning
  $data  = $soc_ret->[1]; # the data of the SOAP return
}
DESCRIPTION
This module is a non-blocking wrapper around SOAP::Lite for POE. As any non-blocking wrapper it needs to spawn a dedicated process to deal with the blocking SOAP calls. As with most non-blocking wrappers we used PoCo::Generic for abstracting all the details of the dedicated process and it's events. Nevertheless, because we use PoCo::Generic, it is mandatory to know all the SOAP methods beforehand, hence the need to require a service descriptor (WSDL) to work with this library.
If you have a particular need to use SOAP WITHOUT WSDL, please drop a line a we'll see what we can do to help you.
SEE ALSO
POE::Component::Server::AsyncEndpoint::ChannelAdapter::SOAP POE::Component::Server::AsyncEndpoint::ChannelAdapter::Stomp
POE::Component::Server::AsyncEndpoint POE
AUTHOR
Alejandro Imass <ait@p2ee.org> Alejandro Imass <aimass@corcaribe.com>
COPYRIGHT AND LICENSE
Copyright (C) 2008 by Alejandro Imass / Corcaribe Tecnología C.A. for the P2EE Project
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.8 or, at your option, any later version of Perl 5 you may have available.
1 POD Error
The following errors were encountered while parsing the POD:
- Around line 538:
 Non-ASCII character seen before =encoding in 'Tecnología'. Assuming UTF-8