首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是XmlNode?

什么是XmlNode?
EN

Stack Overflow用户
提问于 2011-08-19 02:59:49
回答 1查看 791关注 0票数 0

我正在尝试使用PHP和nusoap将数据提交到web服务。我调用的web服务操作位于以下位置:http://service.leads360.com/ClientService.asmx?op=AddLeads

该操作的预期参数为username as string、password as string和leads as XmlNode。对于这个XmlNode,他们给出了模式和xml文档的示例:

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

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

因此,我复制了他们提供的xml文档并将其转换为数组,将该数组与usernamepassword一起放入另一个名为$params的数组中并执行

代码语言:javascript
复制
$result = $client->call('AddLeads', $params);

不幸的是,它给了我以下错误:

代码语言:javascript
复制
[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

我还粘贴了下面作为leads参数传递的数组。请告诉我该数组是否表示示例中的xml文档,以及它是否是有效的XmlNode

代码语言:javascript
复制
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
                                                )
                                        )
                                )
                        )
                )
        )
)
EN

回答 1

Stack Overflow用户

发布于 2011-08-20 04:00:53

与元素的值是简单的int或string不同,XmlNode是一个更复杂的结构,它是一个XML元素。

在服务的WSDL中,您可以找到AddLeads元素的以下内容:

代码语言:javascript
复制
<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元素的架构。该架构将用于验证您提供的标记。

注意,usernamepassword的类型是string,而leads是"any“复杂类型。这将意味着一条类似如下的消息:

代码语言:javascript
复制
<soapenv:Body>
  <AddLeads>
     <username>foo</username>
     <password>bar</password>
     <leads>
        You may enter ANY elements at this point
     </leads>
  </AddLeads>
</soapenv:Body>

但是“任何”复杂类型的定义都有点过于宽泛,因此web服务的创建者决定将其限制为他们认为有用的信息。下面的模式限制了AddLeads操作上下文中的"any“:

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

下面是一个有效的实例:

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

我不知道PHP,但是您的代码必须生成一条符合web服务WSDL类型和leads类型的消息。

我建议您使用像SoapUI这样的工具来创建调用web服务的请求。一旦您获得一个成功响应的有效消息内容,调整您的PHP代码以生成相同的格式。您还会发现(另一个工具) TCP Monitor在查看客户端和web服务之间交换的消息方面非常有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7112667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档