PHP SOAP error: Method element needs to belong to the namespace
Posted
by kdm
on Stack Overflow
See other posts from Stack Overflow
or by kdm
Published on 2010-03-25T16:27:13Z
Indexed on
2010/03/27
7:03 UTC
Read the original article
Hit count: 437
I'm unable to retrieve data from an XML document, any help is greatly appreciated. I'm using PHP 5.2.10 and the WSDL url is an internal link within my company. The following code produces an error.
$url = "http://dta-info/IVR/IVRINFO?WSDL";
$params = array("zANI" => "12345");
try{
$client = new SoapClient($url,
array(
'trace' => 1,
'connection_timeout' => 2,
'location' => $url
)
);
}catch(SoapFault $fault){
echo "faultstring: {$fault->faultstring})\n";
}
try{
$result = $client->GetIVRinfo($params);
}catch(SoapFault $fault){
echo "(faultcode: {$fault->faultcode}, faultstring: {$fault->faultstring} )\n";
}
(faultcode: SOAP-ENV:Client, faultstring: There should be no path or parameters after a SOAP vname. )
So i tried to use a non-wsdl mode but i receive a different error no matter how i try to format the params.
$url = "http://dta-info/IVR/IVRINFO";
$params = array("zANI" => "12345");
try{
$client = new SoapClient(null,
array(
'trace' => 1,
'connection_timeout' => 2,
'location' => $url,
'uri' => $uri,
'style' => SOAP_DOCUMENT,
'use' => SOAP_LITERAL,
'soap_version' => SOAP_2
)
);
}catch(SoapFault $fault){
echo "faultstring: {$fault->faultstring})\n";
}
try{
$result = $client->GetIVRinfo($params);
}catch(SoapFault $fault){
echo "(faultcode: {$fault->faultcode}, faultstring: {$fault->faultstring} )\n";
}
(faultcode: SOAP-ENV:Client, faultstring: The method element needs to belong to the namespace 'http://GETIVRINFO/IVR/IVRINFO'. )
I have tested this WSDL with a tool called SoapUI and it returns the results with no errors. So it leads me to believe I'm not formatting the vars or headers correctly with PHP. I also tried passing in a xml fragment as the param but that returns the same error. What am i doing wrong??????
$params = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ivr="http://GETIVRINFO/IVR/IVRINFO">
<soapenv:Header/>
<soapenv:Body>
<ivr:GetIVRinfo>
<!--Optional:-->
<ivr:zANI>12345</ivr:zANI>
</ivr:GetIVRinfo>
</soapenv:Body>
</soapenv:Envelope>';
Here is the WSDL document:
<?xml version="1.0"?><wsdl:definitions name="IVR" targetNamespace="http://GETIVRINFO/IVR/IVRINFO"
xmlns:tns="http://GETIVRINFO/IVR/IVRINFO"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:sql="http://schemas.microsoft.com/SQLServer/2001/12/SOAP"
xmlns:sqltypes="http://schemas.microsoft.com/SQLServer/2001/12/SOAP/types"
xmlns:sqlmessage="http://schemas.microsoft.com/SQLServer/2001/12/SOAP/types/SqlMessage"
xmlns:sqlresultstream="http://schemas.microsoft.com/SQLServer/2001/12/SOAP/types/SqlResultStream">
<wsdl:types><xsd:schema targetNamespace='http://schemas.microsoft.com/SQLServer/2001/12/SOAP/types' elementFormDefault='qualified' attributeFormDefault='qualified'>
<xsd:import namespace='http://www.w3.org/2001/XMLSchema'/>
<xsd:simpleType name='nonNegativeInteger'>
<xsd:restriction base='xsd:int'>
<xsd:minInclusive value='0'/>
</xsd:restriction>
</xsd:simpleType>
<xsd:attribute name='IsNested' type='xsd:boolean'/>
<xsd:complexType name='SqlRowSet'>
<xsd:sequence>
<xsd:element ref='xsd:schema'/>
<xsd:any/>
</xsd:sequence>
<xsd:attribute ref='sqltypes:IsNested'/>
</xsd:complexType>
<xsd:complexType name='SqlXml' mixed='true'>
<xsd:sequence>
<xsd:any/>
</xsd:sequence>
</xsd:complexType>
<xsd:simpleType name='SqlResultCode'>
<xsd:restriction base='xsd:int'>
<xsd:minInclusive value='0'/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
<xsd:schema targetNamespace='http://schemas.microsoft.com/SQLServer/2001/12/SOAP/types/SqlMessage'
elementFormDefault='qualified' attributeFormDefault='qualified'>
<xsd:import namespace='http://www.w3.org/2001/XMLSchema'/>
<xsd:import namespace='http://schemas.microsoft.com/SQLServer/2001/12/SOAP/types'/>
<xsd:complexType name='SqlMessage'>
<xsd:sequence minOccurs='1' maxOccurs='1'>
<xsd:element name='Class' type='sqltypes:nonNegativeInteger'/>
<xsd:element name='LineNumber' type='sqltypes:nonNegativeInteger'/>
<xsd:element name='Message' type='xsd:string'/>
<xsd:element name='Number' type='sqltypes:nonNegativeInteger'/>
<xsd:element name='Procedure' type='xsd:string'/>
<xsd:element name='Server' type='xsd:string'/>
<xsd:element name='Source' type='xsd:string'/>
<xsd:element name='State' type='sqltypes:nonNegativeInteger'/>
</xsd:sequence>
<xsd:attribute ref='sqltypes:IsNested'/>
</xsd:complexType>
</xsd:schema>
<xsd:schema targetNamespace='http://schemas.microsoft.com/SQLServer/2001/12/SOAP/types/SqlResultStream'
elementFormDefault='qualified' attributeFormDefault='qualified'>
<xsd:import namespace='http://www.w3.org/2001/XMLSchema'/>
<xsd:import namespace='http://schemas.microsoft.com/SQLServer/2001/12/SOAP/types'/>
<xsd:import namespace='http://schemas.microsoft.com/SQLServer/2001/12/SOAP/types/SqlMessage'/>
<xsd:complexType name='SqlResultStream'>
<xsd:choice minOccurs='1' maxOccurs='unbounded'>
<xsd:element name='SqlRowSet' type='sqltypes:SqlRowSet'/>
<xsd:element name='SqlXml' type='sqltypes:SqlXml'/>
<xsd:element name='SqlMessage' type='sqlmessage:SqlMessage'/>
<xsd:element name='SqlResultCode' type='sqltypes:SqlResultCode'/>
</xsd:choice>
</xsd:complexType>
</xsd:schema>
<xsd:schema targetNamespace="http://GETIVRINFO/IVR/IVRINFO" elementFormDefault="qualified" attributeFormDefault="qualified">
<xsd:import namespace="http://www.w3.org/2001/XMLSchema"/>
<xsd:import namespace="http://schemas.microsoft.com/SQLServer/2001/12/SOAP/types"/>
<xsd:import namespace="http://schemas.microsoft.com/SQLServer/2001/12/SOAP/types/SqlMessage"/>
<xsd:import namespace="http://schemas.microsoft.com/SQLServer/2001/12/SOAP/types/SqlResultStream"/>
<xsd:element name="GetIVRinfo">
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="1" name="zANI" type="xsd:string" nillable="true"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="GetIVRinfoResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="1" maxOccurs="1" name="GetIVRinfoResult" type="sqlresultstream:SqlResultStream"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</wsdl:types>
<wsdl:message name="GetIVRinfoIn">
<wsdl:part name="parameters" element="tns:GetIVRinfo"/>
</wsdl:message>
<wsdl:message name="GetIVRinfoOut">
<wsdl:part name="parameters" element="tns:GetIVRinfoResponse"/>
</wsdl:message>
<wsdl:portType name="SXSPort">
<wsdl:operation name="GetIVRinfo">
<wsdl:input message="tns:GetIVRinfoIn"/>
<wsdl:output message="tns:GetIVRinfoOut"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="SXSBinding" type="tns:SXSPort">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="GetIVRinfo">
<soap:operation soapAction="http://GETIVRINFO/IVR/IVRINFO/GetIVRinfo" style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="IVR">
<wsdl:port name="SXSPort" binding="tns:SXSBinding">
<soap:address location="http://GETIVRINFO/IVR/IVRINFO"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
© Stack Overflow or respective owner