logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

SOAP::WSDL::Client - SOAP::WSDL's SOAP Client

Author

       Martin Kutter <martin.kutter fen-net.de>

Methods

call
        $soap->call( \%method, \@parts );

       %method is a hash with the following keys:

        Name           Description
        ----------------------------------------------------
        operation      operation name
        soap_action    SOAPAction HTTP header to use
        style          Operation style. One of (document|rpc)
        use            SOAP body encoding. One of (literal|encoded)

       The style and use keys have no influence yet.

       @parts is a list containing the elements of the message parts.

       For backward compatibility, call may also be called as below:

        $soap->call( $method, \@parts );

       In this case, $method is the SOAP operation name, and the SOAPAction header is guessed from the first
       part's namespace and the operation name (which is mostly correct, but may fail). Operation style and body
       encoding are assumed to be document/literal

   Configurationmethodsoutputxml

        $soap->outputxml(1);

       When set, call() returns the raw XML of the SOAP Envelope.

       set_content_type

        $soap->set_content_type('application/xml; charset: utf8');

       Sets the content type and character encoding.

       You probably should not use a character encoding different from utf8: SOAP::WSDL::Client will not convert
       the request into a different encoding (yet).

       To leave out the encoding, just set the content type without appending charset like this:

         $soap->set_content_type('text/xml');

       Default:

        text/xml; charset: utf8

       set_prefix

        $soap->set_prefix('ns2');

       If set, alters the serialization of the request XML such that the supplied value is used as a namespace
       prefix for SOAP method calls. By way of example, the default XML serialization returns something like
       this:

           <?xml version="1.0"?>
           <SOAP-ENV:Envelope
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
             <SOAP-ENV:Body>
               <getElementId xmlns="http://services.exmaple.org/">
                 <elementId>12345</elementId>
               </getElementId>
             </SOAP-ENV:Body>
           </SOAP-ENV:Envelope>

       If the sample set_prefix() call above is used prior to calling your SOAP method, the XML serialization
       returns this instead:

           <?xml version="1.0"?>
           <SOAP-ENV:Envelope
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
               xmlns:ns2="http://services.example.org/">
             <SOAP-ENV:Body>
               <ns2:getElementId>
                 <elementId>12345</elementId>
               </ns2:getElementId>
             </SOAP-ENV:Body>
           </SOAP-ENV:Envelope>

       This is useful in cases where, for instance, one is communicating with a JAX
       <https://jax-ws.dev.java.net/> webservice, which tends to understand the latter but not the former. Note
       that this implementation is currently limited to a single additional namespace; if you require multiple
       custom namespaces, you should probably look into creating your own serializer.

   FeaturesdifferentfromSOAP::Lite
       SOAP::WSDL does not aim to be a complete replacement for SOAP::Lite - the SOAP::Lite module has its
       strengths and weaknesses and SOAP::WSDL is designed as a cure for the weakness of little WSDL support -
       nothing more, nothing less.

       Nonetheless SOAP::WSDL mimics part of SOAP::Lite's API and behaviour, so SOAP::Lite users can switch
       without looking up every method call in the documentation.

       A few things are quite different from SOAP::Lite, though:

       SOAPrequestdata

       SOAP request data may either be given as message object, or as a hash ref (in which case it will
       automatically be encoded into a message object).

       Returnvalues

       The result from call() is not a SOAP::SOM object, but a message object.

       Message objects' classes may be generated from WSDL definitions automatically - see
       SOAP::WSDL::Generator::Typelib on how to generate your own WSDL based message class library.

       Faulthandling

       SOAP::WSDL::Client returns a fault object on errors, even on transport layer errors.

       The fault object is a SOAP1.1 fault object of the following "SOAP::WSDL::SOAP::Typelib::Fault11".

       SOAP::WSDL::SOAP::Typelib::Fault11 objects are false in boolean context, so you can just do something
       like:

        my $result = $soap->call($method, $data);

        if ($result) {
           # handle result
        }
        else {
           die $result->faultstring();
        }

       outputxml

       SOAP::Lite returns only the content of the SOAP body when outputxml is set to true. SOAP::WSDL::Client
       returns the complete XML response.

       Auto-Dispatching

       SOAP::WSDL::Client doesnot support auto-dispatching.

       This is on purpose: You may easily create interface classes by using SOAP::WSDL::Client and implementing
       something like

        sub mySoapMethod {
            my $self = shift;
            $soap_wsdl_client->call( mySoapMethod, @_);
        }

       You may even do this in a class factory - see wsdl2perl for creating such interfaces.

Name

       SOAP::WSDL::Client - SOAP::WSDL's SOAP Client

Repository Information

        $Rev: 851 $
        $LastChangedBy: kutterma $
        $Id: Client.pm 851 2009-05-15 22:45:18Z kutterma $
        $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Client.pm $

perl v5.36.0                                       2022-10-14                            SOAP::WSDL::Client(3pm)

Synopsis

        use SOAP::WSDL::Client;
        my $soap = SOAP::WSDL::Client->new({
            proxy => 'http://www.example.org/webservice/test'
        });
        $soap->call( \%method, $body, $header);

Troubleshooting

Accessingprotectedwebservices
       Accessing protected web services is very specific for the transport backend used.

       In general, you may pass additional arguments to the set_proxy method (or a list ref of the web service
       address and any additional arguments to the new method's proxy argument).

       Refer to the appropriate transport module for documentation.

See Also