PHP SoapParam / SoapVar for complex type gives "object has no xxx property" - a repeating element

This question is related to the use of SoapParam and SoapVar in the PHP SOAP client to handle duplicate elements, where queries cannot be created as associative arrays. In particular, it addresses the complexity of using SoapParam / SoapVar for complex elements.

I have a working code that I am trying to modify in order to allow re-element in a SOAP request.

The working code is as follows and correctly returns information about one consignor identifier.

$oClient = new SoapClient($wsdlFilespec, $arguments);
$parameters = array(
   'header' => array(
      'source' => $_POST['source'],
      'accountNo' => $_POST['accountNo'],
      'userAccessKey' => $connection['userAccessKey']
      ),
   'consignmentId' => $_POST['consignmentId']
     );
$request = array('parameters' => $parameters);
$result = $oClient->__soapCall($operation, $request);

, , , . SoapParam SoapVar; , .

:

$header = array(
   new SoapParam((string)$_POST['source'], 'source'), 
   new SoapParam((int)$_POST['accountNo'], 'accountNo'),
   new SoapParam((string)$connection['userAccessKey'], 'userAccessKey')
  );

$parameters = array(
   new SoapParam($header, 'header'),
   new SoapParam((string)'PDH44109', 'consignmentId'),
   new SoapParam((string)'PDH44110', 'consignmentId')
     );
$request = array('parameters' => $parameters);

: SOAP-ERROR: : 'header'.

SoapVar "header" :

$header = array(
  new SoapParam((string)$_POST['source'], 'source'), 
  new SoapParam((int)$_POST['accountNo'], 'accountNo'),
  new SoapParam((string)$connection['userAccessKey'], 'userAccessKey')
  );
$headerVar = new SoapVar($header, SOAP_ENC_OBJECT, 'TransactionHeaderType',     
"http://myexpress/Common/actions/externals/Consignment/v1");

$parameters = array(
           new SoapParam($headerVar, 'header'),
   new SoapParam((string)'PDH44109', 'consignmentId'),
   new SoapParam((string)'PDH44110', 'consignmentId')
     );
$request = array('parameters' => $parameters);

: SOAP-ERROR: : 'header'.

, :

$request = array('parameters' => $parameters);
$request = array($parameters);
$request = $parameters;

$header, XML, __soapCall, __doRequest , :

<SOAPENV:Body><ns1:getConsignmentDetailRequest/>
<consignmentId>PDH44109</consignmentId><consignmentId>PDH44110</consignmentId>
</SOAP-ENV:Body>

, - , , , "" ( ) .

! . SoapVar, , .

, ""? wsdl .

------

<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://my.com.au/ESB/Services/Concrete/External/Services/v1" 

xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns0="http://myexpress/Common/actions/externals/Consignment/v1" 

xmlns:ns1="http://myexpress/Common/externals/Faultv1" xmlns:ns2="http://myexpress/Common/actions/externals/FreightCalculation/v1" 

xmlns:ns3="http://myexpress/Common/Primitives/v1" xmlns:ns4="http://myexpress/Common/FreightProcessing/v1" 

xmlns:ns5="http://myexpress/Common/Account/v1" xmlns:ns6="http://myexpress/Common/Imaging/v1" name="Untitled" 

targetNamespace="http://my.com.au/ESB/Services/Concrete/External/Services/v1">

------

        <xsd:schema xmlns="http://myexpress/Common/Primitives/v1" xmlns:xsd="http://www.w3.org/2001/XMLSchema" 

xmlns:acc="http://myexpress/Common/Account/v1" targetNamespace="http://myexpress/Common/Primitives/v1" elementFormDefault="qualified" 

attributeFormDefault="unqualified">
            <xsd:import namespace="http://myexpress/Common/Account/v1"/>
   .
   .
   .
   .

           <xsd:complexType name="TransactionHeaderType">
                <xsd:sequence>
                    <xsd:element name="source" type="xsd:string"/>
                    <xsd:element name="accountNo" type="xsd:integer"/>
                    <xsd:element name="userAccessKey" type="xsd:string"/>
                    <xsd:element name="userId" type="ns3:userIdType" minOccurs="0"/>
                    <xsd:element name="transactionId" type="ns3:transactionIdType" minOccurs="0"/>
                    <xsd:element name="transactionDatetime" type="xsd:dateTime" minOccurs="0"/>
                </xsd:sequence>
            </xsd:complexType>

------

            <xsd:simpleType name="consignmentIdType">
                <xsd:restriction base="xsd:string">
                    <xsd:maxLength value="30"/>
                </xsd:restriction>
            </xsd:simpleType>

------

            <xsd:element name="getConsignmentDetailRequest">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="header" type="prim:TransactionHeaderType"/>
                        <xsd:element name="consignmentId" type="ns0:consignmentIdType" maxOccurs="unbounded"/>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>

------
+5
1

SoapVar SoapParam , :

$oClient = new SoapClient($wsdlFilespec, $arguments); 
$parameters = array(
                    'header' => array(
                                      'source' => $_POST['source'],
                                      'accountNo' => $_POST['accountNo'],
                                      'userAccessKey' => $connection['userAccessKey']
                                     ),
                    'consignmentId' => array('PDH44109', 'PDH44110')
                    );
$request = array('parameters' => $parameters);
$result = $oClient->__soapCall($operation, $request); 
+8

All Articles