Как добавить атрибуты в объект Java SoapVar?

Как добавить атрибуты в объект Java SoapVar? (PHP5, SoapClient, SoapVar)

У меня есть ситуация с запросом клиента SOAP, где я повторяю разделы («ответы»), каждый из которых имеет вопрос и выбор. Все это часть процесса оценки викторины. Основываясь на том, что я видел с клиентом Soap PHP5, подход массива не является жизнеспособным, так как повторяются теги «ответ». Исправьте меня, если вы знаете, как писать это с помощью структуры массива.

Итак, я использовал объекты SoapVar для определения сложной структуры объекта. Все прошло довольно хорошо, пока я не заметил, что мне нужны Атрибуты в одном из внешних тегов; identityRequest.

<ns1:invokeIdentityService> <ns1:identityRequest> <ns1:scoreRequest> <ns1:quizId>6982971</ns1:quizId> <ns1:answer> <ns1:questionId>25867508</ns1:questionId> <ns1:choiceId>128423504</ns1:choiceId> </ns1:answer> <ns1:answer> <ns1:questionId>25867509</ns1:questionId> <ns1:choiceId>128423507</ns1:choiceId> </ns1:answer> <ns1:answer> <ns1:questionId>25867510</ns1:questionId> <ns1:choiceId>128423514</ns1:choiceId> </ns1:answer> </ns1:scoreRequest> </ns1:identityRequest> 

Я видел, как добавлять атрибуты, используя структуру массива, но как это можно сделать с помощью сложного объекта? Я не могу ответить нигде в книге PHP или в Интернете.

Мне нужно добавить 4 объекта (customerReference, locale, productAlias ​​и transactionId) к объекту identityRequest, который будет отображаться в теле SOAP.

 $answers = array(); // Start array with Quiz ID: quizId and questionId/choiceId are at the same level. $answers[] = new SoapVar($quiz_id, XSD_STRING, null, null, 'quizId', $this->is); foreach ($input as $name=>$value) { if (preg_match('/^question([0-9]*)$/i', $name, $parts)) { // Build questionId/choiceId $answer = array(); $answer[] = new SoapVar($parts[1], XSD_STRING, null, null, 'questionId', $this->is); $answer[] = new SoapVar($value , XSD_STRING, null, null, 'choiceId', $this->is); // Build answer $answers[] = new SoapVar((array)$answer, SOAP_ENC_OBJECT, null, null, 'answer', $this->is); } } // Build scoreRequest from $answers (includes quizId) $scoreRequest = new SoapVar((array)$answers, SOAP_ENC_OBJECT, null, null, 'scoreRequest', $this->is); // Wrap with identityRequest $identityRequest = new SoapVar(array('scoreRequest' => $scoreRequest), SOAP_ENC_OBJECT, null, null, 'identityRequest', $this->is); $params = array( 'identityRequest' => $identityRequest, 'customerReference' => 'Company12345', 'locale' => 'en_US', 'productAlias' => 'Alias6789', 'transactionID' => 'transId1234', ); $request = new SoapVar($params, SOAP_ENC_OBJECT, null, null, 'request', $this->is); 

Как добавить эти 4 атрибута в SoapVar? Как вы можете видеть выше, я попробовал сочетание объекта / массива с параметрами $ params, но это, похоже, не работает. Я просто получаю несколько дополнительных тегов / значений XML.

Я ищу что-то вроде:

 <ns1:invokeIdentityService ns1:customerReference="Company12345" ns1:locale="en_US" ns1:productAlias="Alias6789" ns1:transactionID="transId1234"> 

Надеюсь, кто-то может помочь. Я изможден. Я боролся с PHP5 SOAP, как и многие другие. Мне всегда кажется, что это сложнее, чем нужно. Спасибо, продвинутый, Jeff

Related of "Как добавить атрибуты в объект Java SoapVar?"

Кто-то хотел получить более подробную информацию о объекте stdClass (), так что вот оно. Я не утверждаю, что это хороший способ кодировать эту проблему. Там будут лучшие способы.

  // Build scoreRequest from $answers (includes quizId) $scoreRequest = new SoapVar((array)$answers, SOAP_ENC_OBJECT, null, null, 'scoreRequest', $this->is); // SoapVar not used pass this point; see below. //$identityRequest = new SoapVar(array('scoreRequest' => $scoreRequest), SOAP_ENC_OBJECT, null, null, 'identityRequest'); // scoreQuizRequest uses a mixture of SoapVar Objects and stdClass Objects. // stdClass Object is used to allow us to define the attributes for // identityRequest, such as productAlias & transactionID. // Note: $scoreRequest is a SoapVar Object. $request = new stdClass(); $request->identityRequest = new stdClass(); $request->identityRequest->scoreRequest = $scoreRequest; $request->identityRequest->customerReference = $this->customerReference; $request->identityRequest->locale = $this->locale; $request->identityRequest->productAlias = $this->productAlias; $request->identityRequest->transactionID = $this->transactionId;