=head1 NAME

XML::Compile::SOAP::Operation - base-class for possible interactions

=head1 INHERITANCE

 XML::Compile::SOAP::Operation is extended by
   XML::Compile::SOAP11::Operation
   XML::Compile::SOAP12::Operation

=head1 SYNOPSIS

 # created by XML::Compile::WSDL11
 my $op = $wsdl->operation('GetStockPrices');

=head1 DESCRIPTION

These objects are created by L<XML::Compile::WSDL11|XML::Compile::WSDL11>, grouping information
about a certain specific message interchange between a client and
a server.

=head1 METHODS

=head2 Constructors

=over 4

=item XML::Compile::SOAP::Operation-E<gt>B<new>(OPTIONS)

 -Option   --Default
  action     undef
  endpoints  []
  kin        <required>
  nam        <required>
  schemas    <required>
  transport  'HTTP'

=over 2

=item action => STRING

Some string which is refering to the action which is taken.  For SOAP
protocols, this defines the soapAction header.

=item endpoints => ADDRESS|ARRAY

Where to contact the server.

=item kin => d

This returns the type of operation this is.  There are four kinds, which
are returned as strings C<one-way>, C<request-response>, C<sollicit-response>,
and C<notification>.  The latter two are initiated by a server, the former
two by a client.

=item nam => e

=item schemas => XML::Compile::Cache

=item transport => URI|'HTTP'

C<HTTP> is short for C<http://schemas.xmlsoap.org/soap/http/>, which
is a constant to indicate that transport should use the HyperText
Transfer Protocol.

=back

=back

=head2 Accessors

=over 4

=item $obj-E<gt>B<bindingName>()

=item $obj-E<gt>B<clientClass>()

Returns the class name which implements the Client side for this protocol.

=item $obj-E<gt>B<endPoints>()

Returns the list of alternative URLs for the end-point, which should
be defined within the service's port declaration.

=item $obj-E<gt>B<kind>()

=item $obj-E<gt>B<name>()

=item $obj-E<gt>B<portName>()

=item $obj-E<gt>B<schemas>()

=item $obj-E<gt>B<serverClass>()

Returns the class name which implements the Server side for this protocol.

=item $obj-E<gt>B<serviceName>()

=item $obj-E<gt>B<soapAction>()

Used for the C<soapAction> header in HTTP transport, for routing
messages through firewalls.

=item $obj-E<gt>B<version>()

=item $obj-E<gt>B<wsaAction>('INPUT'|'OUTPUT')

Only available when C<XML::Compile::SOAP::WSA> is loaded. It specifies
the name of the operation in the WSA header.  With C<INPUT>, it is the
Action to be used with a message sent to the server (input to the
server). The C<OUTPUT> is used by the server in its message back.

=back

=head2 Handlers

=over 4

=item $obj-E<gt>B<compileClient>(OPTIONS)

Returns one CODE reference which handles the conversion from a perl
data-structure into a request message, the transmission of the
request, the receipt of the answer, and the decoding of that answer
into a Perl data-structure.

=item $obj-E<gt>B<compileHandler>(OPTIONS)

Returns a code reference which translates in incoming XML message
into Perl a data-structure, then calls the callback.  The result of
the callback is encoded from Perl into XML and returned.

 -Option  --Default
  callback  <required>

=over 2

=item callback => CODE

=back

=item $obj-E<gt>B<compileTransporter>(OPTIONS)

Create the transporter code for a certain specific target.

 -Option        --Default
  endpoint        <from WSDL>
  server          undef
  transport_hook  undef
  transporter     <created>

=over 2

=item endpoint => URI|ARRAY-of-URI

Overrule the destination address(es).

=item server => URI-HOST

Overrule only the server part in the endpoint, not the whole endpoint.
This could be a string like C<username:password@myhost:4711>.  Only
used when no explicit C<endpoint> is provided.

=item transport_hook => CODE

Passed to L<XML::Compile::Transport::compileClient(hook)|XML::Compile::Transport/"Handlers">.  Can be
used to create off-line tests and last resort work-arounds.  See the
DETAILs chapter in the L<XML::Compile::Transport|XML::Compile::Transport> manual page.

=item transporter => CODE

The routine which will be used to exchange the data with the server.
This code is created by an L<XML::Compile::Transport::compileClient()|XML::Compile::Transport/"Handlers">
extension. By default, a transporter compatible to the protocol
is created.  However, in most cases you want to reuse one (HTTP1.1)
connection to a server.

=back

=back

=head2 Helpers

=over 4

=item $obj-E<gt>B<explain>(WSDL, FORMAT, DIRECTION, OPTIONS)

Dump an annotated structure showing how the operation works, helping
developers to understand the schema. FORMAT is C<PERL> or C<XML>.

The DIRECTION is C<INPUT>, it will return the message which the client
sends to the server (input for the server). The C<OUTPUT> message is
sent as response by the server.

=item XML::Compile::SOAP::Operation-E<gt>B<register>(URI, ENVNS)

Declare an operation type, but WSDL specific URI and envelope namespace.

=back

=head1 SEE ALSO

This module is part of XML-Compile-SOAP distribution version 2.33,
built on November 30, 2012. Website: F<http://perl.overmeer.net/xml-compile/>

Other distributions in this suite:
L<XML::Compile>,
L<XML::Compile::SOAP>,
L<XML::Compile::SOAP12>,
L<XML::Compile::SOAP::Daemon>,
L<XML::Compile::SOAP::WSA>,
L<XML::Compile::C14N>,
L<XML::Compile::WSS>,
L<XML::Compile::WSS::Signature>,
L<XML::Compile::Tester>,
L<XML::Compile::Cache>,
L<XML::Compile::Dumper>,
L<XML::Compile::RPC>,
L<XML::Rewrite>,
L<XML::eXistDB>,
and
L<XML::LibXML::Simple>.

Please post questions or ideas to the mailinglist at
F<http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/xml-compile>

For live contact with other developers, visit the C<#xml-compile> channel
on C<irc.perl.org>.

=head1 LICENSE

Copyrights 2007-2012 by [Mark Overmeer]. For other contributors see ChangeLog.

This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
See F<http://www.perl.com/perl/misc/Artistic.html>

