PHP SoapClient,wsdl有必填字段但实际上并不需要

时间:2014-06-02 22:30:14

标签: php .net soap wsdl

好的另一个PHP SoapClient问题,你猜对它访问.net wsdl。

我正在访问一个soap服务,其中包含min要求为1的元素,因此如果从php SoapClient中省略这些元素,则会抛出一个错误,指出该元素不存在。

如果我提供它们/提供空值/传递空值,则有问题的soap服务会引发错误。有问题的参数是布尔值。

当我通过SoapUI发送请求而没有xml中的参数时,我得到了有效的响应。

还有一位朋友在.net中尝试此操作,该对象的参数的默认值为null。我的朋友告诉我.net中的一个sting有一个默认的空值但布尔值没有?

我对我应该尝试什么感到困惑,目前正在使用弃用的__call方法?

更新

wsdl中的部分如下:

<s:complexType name="BankDetails">
    <s:sequence>
        <s:element minOccurs="0" maxOccurs="1" name="AccountName" type="s:string"/>
        <s:element minOccurs="0" maxOccurs="1" name="AccountNumber" type="s:string"/>
        <s:element minOccurs="1" maxOccurs="1" name="Amex" type="s:boolean"/>
        <s:element minOccurs="1" maxOccurs="1" name="ChequeCard" type="s:boolean"/>
        <s:element minOccurs="1" maxOccurs="1" name="CreditLimit" type="s:decimal"/>
        <s:element minOccurs="1" maxOccurs="1" name="CurrentAccount" type="s:boolean"/>
        <s:element minOccurs="1" maxOccurs="1" name="DepositAccount" type="s:boolean"/>
        <s:element minOccurs="1" maxOccurs="1" name="Diners" type="s:boolean"/>
        <s:element minOccurs="1" maxOccurs="1" name="DirectDebit" type="s:boolean"/>
        <s:element minOccurs="1" maxOccurs="1" name="JointAccount" type="s:boolean"/>
        <s:element minOccurs="1" maxOccurs="1" name="Mastercard" type="s:boolean"/>
        <s:element minOccurs="1" maxOccurs="1" name="Months" type="s:int"/>
        <s:element minOccurs="1" maxOccurs="1" name="MortgageAccount" type="s:boolean"/>
        <s:element minOccurs="1" maxOccurs="1" name="OtherCard" type="s:boolean"/>
        <s:element minOccurs="1" maxOccurs="1" name="PaymentBookRequired" type="s:boolean"/>
        <s:element minOccurs="1" maxOccurs="1" name="Storecard" type="s:boolean"/>
        <s:element minOccurs="1" maxOccurs="1" name="Visa" type="s:boolean"/>
        <s:element minOccurs="1" maxOccurs="1" name="Years" type="s:int"/>
    </s:sequence>
</s:complexType>

我在Soap UI中发送的成功请求是:

<BankDetails>
    <CurrentAccount>true</CurrentAccount>
    <Months>0</Months>
    <Years>3</Years>
</BankDetails>

1 个答案:

答案 0 :(得分:1)

假设您正在传递XML,请尝试删除空的整个元素。例如,如果因为你把它弄空了就打破了,只需删除整行。大多数WSDL不喜欢接收空行。他们或者宁愿在里面有东西,或者根本没有那条线。

或者尝试传递一个假布尔值。