Что такое XmlNode? - PullRequest
       14

Что такое XmlNode?

0 голосов
/ 18 августа 2011

Я пытаюсь отправить данные в веб-сервис, используя PHP и nusoap.Операция веб-службы, которую я вызываю, находится здесь: http://service.leads360.com/ClientService.asmx?op=AddLeads

Ожидаемые параметры операции: username как строка, password как строка и leads как XmlNode.Для этого XmlNode они приводят примеры схемы и XML-документа:

http://service.leads360.com/Documentation/Schemas/Client/Leads.Request.xsd

http://service.leads360.com/Documentation/Examples/Client/AddLeads.leads.xml

Поэтому я скопировал предоставленный ими документ XML и превратил его вмассив, поместите этот массив в другой массив с именем $params вместе с username и password и выполните

$result = $client->call('AddLeads', $params);

К сожалению, он дает мне следующую ошибку:

[faultcode] => soap:Server
    [faultstring] => System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.NullReferenceException: Object reference not set to an instance of an object.
   at LeadManager.Business.XmlHelper.RemoveNamespace(XmlNode xml, Boolean asElement) in c:\Code\DEV\LeadManager_Business\Utilities\XmlHelper.cs:line 323
   at LeadManagerService.ClientService.InsertSerializedLeads(XmlNode descriptors)
   at LeadManagerService.ClientService.InsertLeads(XmlNode descriptor)
   at LeadManagerService.Invoker 1.Invoke(ServiceContext context, String methodName, ICredentials credentials, Object parameters, Requestor requestor)
   at LeadManagerService.ClientService.AddLeads(String username, String password, XmlNode leads)
   --- End of inner exception stack trace ---

Я вставил свой код по адресу: http://pastebin.com/7jbPGuqn.

Я также вставляю массив, который передаю, в качестве параметра приводит ниже.Пожалуйста, скажите мне, если массив представляет XML-документ в примере и является ли он действительным XmlNode.

Array
(
    [Leads] => Array
        (
            [Lead] => Array
                (
                    [0] => Array
                        (
                            [Status] => Array
                                (
                                )
                            [Status_attr] => Array
                                (
                                    [StatusId] => 2
                                )
                            [Campaign] => Array
                                (
                                )
                            [Campaign_attr] => Array
                                (
                                    [CampaignId] => 3
                                )
                            [Agent] => Array
                                (
                                )
                            [Agent_attr] => Array
                                (
                                    [AgentId] => 1
                                )
                            [Fields] => Array
                                (
                                    [Field] => Array
                                        (
                                            [0] => Array
                                                (
                                                )
                                            [1] => Array
                                                (
                                                )
                                            [0_attr] => Array
                                                (
                                                    [FieldId] => 2
                                                    [Value] => F1Name
                                                )
                                            [1_attr] => Array
                                                (
                                                    [FieldId] => 3
                                                    [Value] => L1Name
                                                )
                                            [2] => Array
                                                (
                                                )
                                            [2_attr] => Array
                                                (
                                                    [FieldId] => 4
                                                    [Value] => a@y.com
                                                )
                                            [3] => Array
                                                (
                                                )
                                            [3_attr] => Array
                                                (
                                                    [FieldId] => 5
                                                    [Value] => 111111111
                                                )
                                            [4] => Array
                                                (
                                                )
                                            [4_attr] => Array
                                                (
                                                    [FieldId] => 6
                                                    [Value] => 
                                                )
                                        )
                                )
                        )
                    [1] => Array
                        (
                            [Fields] => Array
                                (
                                    [Field] => Array
                                        (
                                            [0] => Array
                                                (
                                                )
                                            [1] => Array
                                                (
                                                )
                                            [0_attr] => Array
                                                (
                                                    [FieldId] => 2
                                                    [Value] => F2Name
                                                )
                                            [1_attr] => Array
                                                (
                                                    [FieldId] => 3
                                                    [Value] => L2Name
                                                )
                                            [2] => Array
                                                (
                                                )
                                            [2_attr] => Array
                                                (
                                                    [FieldId] => 4
                                                    [Value] => b@y.com
                                                )
                                            [3] => Array
                                                (
                                                )
                                            [3_attr] => Array
                                                (
                                                    [FieldId] => 5
                                                    [Value] => 222222222
                                                )
                                        )
                                )
                        )
                    [2] => Array
                        (
                            [Fields] => Array
                                (
                                    [Field] => Array
                                        (
                                            [0] => Array
                                                (
                                                )
                                            [1] => Array
                                                (
                                                )
                                            [0_attr] => Array
                                                (
                                                    [FieldId] => 2
                                                    [Value] => F3Name
                                                )
                                            [1_attr] => Array
                                                (
                                                    [FieldId] => 3
                                                    [Value] => L3Name
                                                )
                                            [2] => Array
                                                (
                                                )
                                            [2_attr] => Array
                                                (
                                                    [FieldId] => 4
                                                    [Value] => c@y.com
                                                )
                                            [3] => Array
                                                (
                                                )
                                            [3_attr] => Array
                                                (
                                                    [FieldId] => -9999999
                                                    [Value] => 333333333
                                                )
                                        )
                                )
                        )
                )
        )
)

1 Ответ

0 голосов
/ 20 августа 2011

В отличие от элемента, значение которого является чем-то простым, например, int или string, XmlNode является более сложной структурой, это элемент XML.

Внутри WSDL службы вы найдете следующее для элемента AddLeads:

<s:element name="AddLeads">
    <s:complexType>
      <s:sequence>
        <s:element minOccurs="0" maxOccurs="1" name="username" type="s:string"/>
        <s:element minOccurs="0" maxOccurs="1" name="password" type="s:string"/>
        <s:element minOccurs="0" maxOccurs="1" name="leads">
          <s:complexType mixed="true">
            <s:sequence>
              <s:any/>
            </s:sequence>
          </s:complexType>
        </s:element>
      </s:sequence>
    </s:complexType>
</s:element>

Это схема для элемента AddLeads. Схема будет использоваться для проверки предоставленной вами разметки.

Обратите внимание, что username и password имеют строку типа, тогда как leads является "любым" сложным типом. Это будет означать сообщение, подобное этому:

<soapenv:Body>
  <AddLeads>
     <username>foo</username>
     <password>bar</password>
     <leads>
        You may enter ANY elements at this point
     </leads>
  </AddLeads>
</soapenv:Body>

Но «любой» сложный тип является немного более широким в качестве определения, поэтому создатели веб-службы решили ограничить его тем, что они признают полезной информацией. Следующая схема ограничивает «any» в контексте операции AddLeads:

http://service.leads360.com/Documentation/Schemas/Client/Leads.Request.xsd

, для которого допустимым является следующее:

http://service.leads360.com/Documentation/Examples/Client/AddLeads.leads.xml

Я не знаю PHP, но ваш код должен генерировать сообщение, которое соответствует типу WSDL веб-сервиса leads.

Я предлагаю вам использовать такой инструмент, как SoapUI , для создания запросов на вызов веб-службы. Как только вы получите правильное содержание сообщения с успешным ответом, адаптируйте ваш PHP-код для генерации того же формата. Вы также найдете (еще один инструмент) TCP Monitor , который очень полезен для просмотра обмена сообщениями между вашим клиентом и веб-службой.

...