我需要完全按照下面的方式传递SOAP调用,并使用isEmailAvailableResponse获取响应 但看起来PHP不喜欢名称空间或其他东西,我不断收到下面列出的错误 我已经尝试手动传递XML,但确实有效,但我想尝试使用PHP SOAP客户端
<?php
$client = new SoapClient("http://192.168.35.123:8080/iBossCustomer/Email?wsdl", array('trace' => 1));
$arg = array("emailAddressName" => 'helloasdadsad@iburst.co.za');
$params = array("arg0" => $arg);
$client->isEmailAvailable($params);
-------------- XML ------------------------
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ema="http://email.boss.arc/">
<soapenv:Header/>
<soapenv:Body>
<ema:isEmailAvailable>
<!--Optional:-->
<arg0>
<emailAddressName>helloasdadsad@iburst.co.za</emailAddressName>
</arg0>
</ema:isEmailAvailable>
</soapenv:Body>
</soapenv:Envelope>
------------- PHP错误---------------------
捕获异常:SOAP-ERROR:编码:对象没有'成功'属性
------- WSDL文件-------------------
<definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://email.boss.arc/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://email.boss.arc/" name="Email">
<types>
<xsd:schema>
<xsd:import namespace="http://webservice.gateway.email.service.isp.rogueware.org/" schemaLocation="http://192.168.35.123:8080/iBossCustomer/Email?xsd=1"/>
</xsd:schema>
<xsd:schema>
<xsd:import namespace="http://email.boss.arc/" schemaLocation="http://192.168.35.123:8080/iBossCustomer/Email?xsd=2"/>
</xsd:schema>
</types>
<message name="DeleteEmailAccount">
<part name="parameters" element="tns:DeleteEmailAccount"/>
</message>
<message name="DeleteEmailAccountResponse">
<part name="parameters" element="tns:DeleteEmailAccountResponse"/>
</message>
<message name="ReserveEmailAddress">
<part name="parameters" element="tns:ReserveEmailAddress"/>
</message>
<message name="ReserveEmailAddressResponse">
<part name="parameters" element="tns:ReserveEmailAddressResponse"/>
</message>
<message name="CreateEmailDomain">
<part name="parameters" element="tns:CreateEmailDomain"/>
</message>
<message name="CreateEmailDomainResponse">
<part name="parameters" element="tns:CreateEmailDomainResponse"/>
</message>
<message name="isEmailDomainAvailable">
<part name="parameters" element="tns:isEmailDomainAvailable"/>
</message>
<message name="isEmailDomainAvailableResponse">
<part name="parameters" element="tns:isEmailDomainAvailableResponse"/>
</message>
<message name="AddEmailAccountNickname">
<part name="parameters" element="tns:AddEmailAccountNickname"/>
</message>
<message name="AddEmailAccountNicknameResponse">
<part name="parameters" element="tns:AddEmailAccountNicknameResponse"/>
</message>
<message name="GetEmailAccountAttributes">
<part name="parameters" element="tns:GetEmailAccountAttributes"/>
</message>
<message name="GetEmailAccountAttributesResponse">
<part name="parameters" element="tns:GetEmailAccountAttributesResponse"/>
</message>
<message name="GetEmailAccountInformation">
<part name="parameters" element="tns:GetEmailAccountInformation"/>
</message>
<message name="GetEmailAccountInformationResponse">
<part name="parameters" element="tns:GetEmailAccountInformationResponse"/>
</message>
<message name="SetEmailDomainMaxAccountNames">
<part name="parameters" element="tns:SetEmailDomainMaxAccountNames"/>
</message>
<message name="SetEmailDomainMaxAccountNamesResponse">
<part name="parameters" element="tns:SetEmailDomainMaxAccountNamesResponse"/>
</message>
<message name="SetEmailAccountSpamFolderEnabled">
<part name="parameters" element="tns:SetEmailAccountSpamFolderEnabled"/>
</message>
<message name="SetEmailAccountSpamFolderEnabledResponse">
<part name="parameters" element="tns:SetEmailAccountSpamFolderEnabledResponse"/>
</message>
<message name="SetEmailAccountForwardAddress">
<part name="parameters" element="tns:SetEmailAccountForwardAddress"/>
</message>
<message name="SetEmailAccountForwardAddressResponse">
<part name="parameters" element="tns:SetEmailAccountForwardAddressResponse"/>
</message>
<message name="SetEmailAccountLocalDeliveryEnabled">
<part name="parameters" element="tns:SetEmailAccountLocalDeliveryEnabled"/>
</message>
<message name="SetEmailAccountLocalDeliveryEnabledResponse">
<part name="parameters" element="tns:SetEmailAccountLocalDeliveryEnabledResponse"/>
</message>
<message name="SetEmailAccountPassword">
<part name="parameters" element="tns:SetEmailAccountPassword"/>
</message>
<message name="SetEmailAccountPasswordResponse">
<part name="parameters" element="tns:SetEmailAccountPasswordResponse"/>
</message>
<message name="RemoveEmailAccountNickName">
<part name="parameters" element="tns:RemoveEmailAccountNickName"/>
</message>
<message name="RemoveEmailAccountNickNameResponse">
<part name="parameters" element="tns:RemoveEmailAccountNickNameResponse"/>
</message>
<message name="CreateEmailAddress">
<part name="parameters" element="tns:CreateEmailAddress"/>
</message>
<message name="CreateEmailAddressResponse">
<part name="parameters" element="tns:CreateEmailAddressResponse"/>
</message>
<message name="CreateReservedEmailAddress">
<part name="parameters" element="tns:CreateReservedEmailAddress"/>
</message>
<message name="CreateReservedEmailAddressResponse">
<part name="parameters" element="tns:CreateReservedEmailAddressResponse"/>
</message>
<message name="isEmailAvailable">
<part name="parameters" element="tns:isEmailAvailable"/>
</message>
<message name="isEmailAvailableResponse">
<part name="parameters" element="tns:isEmailAvailableResponse"/>
</message>
<message name="UpdateEmailAttribute">
<part name="parameters" element="tns:UpdateEmailAttribute"/>
</message>
<message name="UpdateEmailAttributeResponse">
<part name="parameters" element="tns:UpdateEmailAttributeResponse"/>
</message>
<portType name="Email">
<operation name="DeleteEmailAccount">
<input message="tns:DeleteEmailAccount"/>
<output message="tns:DeleteEmailAccountResponse"/>
</operation>
<operation name="ReserveEmailAddress">
<input message="tns:ReserveEmailAddress"/>
<output message="tns:ReserveEmailAddressResponse"/>
</operation>
<operation name="CreateEmailDomain">
<input message="tns:CreateEmailDomain"/>
<output message="tns:CreateEmailDomainResponse"/>
</operation>
<operation name="isEmailDomainAvailable">
<input message="tns:isEmailDomainAvailable"/>
<output message="tns:isEmailDomainAvailableResponse"/>
</operation>
<operation name="AddEmailAccountNickname">
<input message="tns:AddEmailAccountNickname"/>
<output message="tns:AddEmailAccountNicknameResponse"/>
</operation>
<operation name="GetEmailAccountAttributes">
<input message="tns:GetEmailAccountAttributes"/>
<output message="tns:GetEmailAccountAttributesResponse"/>
</operation>
<operation name="GetEmailAccountInformation">
<input message="tns:GetEmailAccountInformation"/>
<output message="tns:GetEmailAccountInformationResponse"/>
</operation>
<operation name="SetEmailDomainMaxAccountNames">
<input message="tns:SetEmailDomainMaxAccountNames"/>
<output message="tns:SetEmailDomainMaxAccountNamesResponse"/>
</operation>
<operation name="SetEmailAccountSpamFolderEnabled">
<input message="tns:SetEmailAccountSpamFolderEnabled"/>
<output message="tns:SetEmailAccountSpamFolderEnabledResponse"/>
</operation>
<operation name="SetEmailAccountForwardAddress">
<input message="tns:SetEmailAccountForwardAddress"/>
<output message="tns:SetEmailAccountForwardAddressResponse"/>
</operation>
<operation name="SetEmailAccountLocalDeliveryEnabled">
<input message="tns:SetEmailAccountLocalDeliveryEnabled"/>
<output message="tns:SetEmailAccountLocalDeliveryEnabledResponse"/>
</operation>
<operation name="SetEmailAccountPassword">
<input message="tns:SetEmailAccountPassword"/>
<output message="tns:SetEmailAccountPasswordResponse"/>
</operation>
<operation name="RemoveEmailAccountNickName">
<input message="tns:RemoveEmailAccountNickName"/>
<output message="tns:RemoveEmailAccountNickNameResponse"/>
</operation>
<operation name="CreateEmailAddress">
<input message="tns:CreateEmailAddress"/>
<output message="tns:CreateEmailAddressResponse"/>
</operation>
<operation name="CreateReservedEmailAddress">
<input message="tns:CreateReservedEmailAddress"/>
<output message="tns:CreateReservedEmailAddressResponse"/>
</operation>
<operation name="isEmailAvailable">
<input message="tns:isEmailAvailable"/>
<output message="tns:isEmailAvailableResponse"/>
</operation>
<operation name="UpdateEmailAttribute">
<input message="tns:UpdateEmailAttribute"/>
<output message="tns:UpdateEmailAttributeResponse"/>
</operation>
</portType>
<binding name="EmailPortBinding" type="tns:Email">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<operation name="DeleteEmailAccount">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="ReserveEmailAddress">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="CreateEmailDomain">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="isEmailDomainAvailable">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="AddEmailAccountNickname">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="GetEmailAccountAttributes">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="GetEmailAccountInformation">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="SetEmailDomainMaxAccountNames">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="SetEmailAccountSpamFolderEnabled">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="SetEmailAccountForwardAddress">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="SetEmailAccountLocalDeliveryEnabled">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="SetEmailAccountPassword">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="RemoveEmailAccountNickName">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="CreateEmailAddress">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="CreateReservedEmailAddress">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="isEmailAvailable">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="UpdateEmailAttribute">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="Email">
<port name="EmailPort" binding="tns:EmailPortBinding">
<soap:address location="http://192.168.35.123:8080/iBossCustomer/Email"/>
</port>
</service>
</definitions>
`
答案 0 :(得分:0)
它与手动XML一起使用,因为它将绕过WSDL。 xsd2中的WSDL信息看起来不正确,您似乎使用复杂类型emailDdeDTO
作为一个适合多种Web服务方法的所有输入。
以下是您定义为isEmailAvailable()
的输入:
<xs:element name="customerNo" type="xs:string" minOccurs="0"/>
<xs:element name="customerObjNum" type="xs:long" minOccurs="0"/>
<xs:element name="domainName" type="xs:string" minOccurs="0"/>
<xs:element name="emailAddressName" type="xs:string" minOccurs="0"/>
<xs:element name="emailAddressReservedNo" type="xs:long"/>
<xs:element name="errorMessage" type="xs:string" minOccurs="0"/>
<xs:element name="errorStackTrace" type="xs:string" minOccurs="0"/>
<xs:element name="externalReference" type="xs:string" minOccurs="0"/>
<xs:element name="isEmailAddressAvailable" type="xs:boolean" minOccurs="0"/>
<xs:element name="isFreeEmail" type="xs:boolean" minOccurs="0"/>
<xs:element name="isSuccessful" type="xs:boolean" minOccurs="0"/>
<xs:element name="password" type="xs:string" minOccurs="0"/>
<xs:element name="reservationReference" type="xs:long"/>
<xs:element name="subscriberNo" type="xs:string" minOccurs="0"/>
<xs:element name="subscriberObjNum" type="xs:long" minOccurs="0"/>
上述复杂类型的扩展名为abstractDTOut
,它也会导入这些元素:
<xs:element name="failureDescription" type="xs:string" minOccurs="0"/>
<xs:element name="failureType" type="xs:int" minOccurs="0"/>
<xs:element name="successful" type="xs:boolean"/>
请注意successful
没有minOccurs=0
attrbiute?这就是为什么你得到异常successful property missing
。
最好为每个方法的输入结构设置一个单独的复杂类型定义,但快速解决方法是将minOccurs="0"
添加到上面的成功元素中。