我写了soap服务器,soap客户端和wsdl文件。当我调用一个函数时,soap服务器无法识别输入。有人可以帮我解决这个问题。PHP SOAP服务器无法读取输入值(返回empy)?
WSDL文件:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.example.org/accounts/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="accounts" targetNamespace="http://www.example.org/accounts/">
<wsdl:types>
<xsd:schema targetNamespace="http://www.example.org/accounts/">
<xsd:element name="addAcount">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="firstName" type="xsd:string" />
<xsd:element name="lastName" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="addAcountResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="out" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="closeAccount">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="accountNumber" type="xsd:string"></xsd:element>
<xsd:element name="accountHolder" type="xsd:string"></xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="closeAccountResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="status" type="xsd:string"></xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</wsdl:types>
<wsdl:message name="addAcountRequest">
<wsdl:part element="tns:addAcount" name="parameters"/>
</wsdl:message>
<wsdl:message name="addAcountResponse">
<wsdl:part element="tns:addAcountResponse" name="parameters"/>
</wsdl:message>
<wsdl:message name="closeAccountRequest">
<wsdl:part name="parameters" element="tns:closeAccount"></wsdl:part>
</wsdl:message>
<wsdl:message name="closeAccountResponse">
<wsdl:part name="parameters" element="tns:closeAccountResponse"></wsdl:part>
</wsdl:message>
<wsdl:portType name="accounts">
<wsdl:operation name="addAcount">
<wsdl:input message="tns:addAcountRequest"/>
<wsdl:output message="tns:addAcountResponse"/>
</wsdl:operation>
<wsdl:operation name="closeAccount">
<wsdl:input message="tns:closeAccountRequest"></wsdl:input>
<wsdl:output message="tns:closeAccountResponse"></wsdl:output>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="accountsSOAP" type="tns:accounts">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="addAcount">
<soap:operation soapAction="http://www.example.org/accounts/addAcount"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="closeAccount">
<soap:operation soapAction="http://www.example.org/accounts/closeAccount"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="accounts">
<wsdl:port binding="tns:accountsSOAP" name="accountsSOAP">
<soap:address location="http://localhost:8888/testing/wsdl/service.php"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
SOAP客户端,在SOAP客户端我试图访问关闭帐户功能。该功能有两个参数。
$wsdl = 'http://localhost:8888/testing/wsdl/service.php?wsdl';
$options = array('trace' => TRUE);
$client = new SoapClient($wsdl, $options);
$values = array(
'accountNumber' => 'sdfsd',
'accountHolder' => 'sfsdf'
);
$response = $client->closeAccount($values);
echo "<pre>";
print_r($response);
echo "</pre>";
SOAP服务器,
class Exam {
function closeAccount($accountNumber, $accountHolder){
$value = array('status'=>$accountNumber);
return $value;
}
}
$server = new SoapServer("http://localhost:8888/testing/wsdl/addAccount.wsdl");
$server->setClass('Exam');
$server->handle();
在SOAP服务器,当我尝试返回$使用accountNumber它显示数值名称 “对象”。如果我尝试访问$ accountHolder,它将返回空白。
为什么我的soap服务器无法读取输入值。请有人帮助我。
我曾尝试它不工作,这是输出, stdClass的对象 ( [状态] =>对象 ) – user3099298
我尝试第二个选项,但它返回这个 “致命错误:未捕获的SOAPFault例外:SOAP-ENV:Server]不能使用类型为stdClass的对象作为排序” – user3099298
$客户端是SoapClient类的实例化。 closeAccount函数属于考试类。 –