Я могу использовать локальный WSDL в PHP и успешно передавать / возвращать базовые данные, но когда я пытаюсь передать объекты, которые соответствуют сложному типу в WSDL, я получаю следующую ошибку:
Исключение SoapFault: [soapenv: Server] javax.xml.ws.WebServiceException: com.ibm.websphere.sca.ServiceRuntimeException: при синтаксическом анализе собственных данных произошла ошибка. Сообщение об ошибке: java.lang.IllegalArgumentException:Несоответствующий счетчик параметров: ожидал 1 элемент, но получил больше .. Причина: java.lang.IllegalArgumentException: Несоответствующий счетчик параметров: ожидал 1 элемент, но получил больше .: вызвано: Произошла ошибка при синтаксическом анализе собственных данных: Сообщение об ошибке: java.lang.IllegalArgumentException: Несоответствующее количество параметров: ожидается 1 элемент, но получено больше .. Причина: java.lang.IllegalArgumentException: Несоответствующее количество параметров: ожидается 1 элемент, но получено больше.в C: \ wamp \ www \ SugarCE \ testSOAPShawn.php: 65 Трассировка стека: # 0 [внутренняя функция]: SoapClient -> __ call ('EstabIdenti ...', Array) # 1 C: \ wamp \ www \ SugarCE \testSOAPShawn.php (65): SoapClient-> EstabIdentity (Object (stdClass), Object (stdClass)) # 2 {main}
Вот фрагменты из WSDL:
<xsd:element name="establishIdentity">
−
<xsd:complexType>
−
<xsd:sequence>
−
<xsd:element name="processId" nillable="true" type="xsd:string">
−
<xsd:annotation>
−
<xsd:documentation>
Identifies a specific instance of the dialogue process. Returned from the start() operation.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
−
<xsd:element name="identityAttributes" nillable="true" type="bons1:IdentityAttributes">
−
<xsd:annotation>
−
<xsd:documentation>
Key identifying attributes of a program participant.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
Вот мой код с комментариями, где возникает ошибка:
<?php
set_time_limit(0);
require_once('nusoap.php');
$client = new SoapClient('C:\wsdl\BenefitDeterminationProcess_BenefitDialogueServiceSOAP.wsdl', array('trace' => 1));
$start = $client->__soapCall('start', array(new SoapParam((string)'GenesisID', 'prefix')),
array('soapaction' => 'C:\wsdl\BenefitDeterminationProcess_BenefitDialogueServiceSOAP\start'));
$processID = $start;
$exchange = $client->__soapCall('exchangeOptions', array(new SoapParam($processID, 'processId')),
array('soapaction' => 'C:\wsdl\BenefitDeterminationProcess_BenefitDialogueServiceSOAP\exchangeOptions'));
$identityAttributes = new StdClass();
$identityAttributes->IdentityAttributes = new StdClass();
$identityAttributes->IdentityAttributes->ssn = 41441414;
$identityAttributes->IdentityAttributes->firstName = 'John2';
$identityAttributes->IdentityAttributes->lastName = 'Doe2';
$identityAttributes->IdentityAttributes->gender = 'MALE';
$identityAttributes->IdentityAttributes->birthDate = null;
try{
$identity = $client->establishIdentity($processID, $identityAttributes); //ERROR
} catch (SoapFault $f){
echo "ERROR!";
}
$end = $client->__soapCall('stop', array(new SoapParam($processID, 'processId')),
array('soapaction' => 'C:\wsdl\BenefitDeterminationProcess_BenefitDialogueServiceSOAP\stop'));
?>
Любая помощь с благодарностью!Спасибо.