I do SOAP request to SAP PI web service. This service returns SOAP fault like that:
<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP:Body> <SOAP:Fault> <faultcode>SOAP:Server</faultcode> <faultstring>Server Error</faultstring> <detail> <s:SystemError xmlns:s="http://sap.com/xi/WebService/xi2.0"> <context>XIAdapter</context> <code>ADAPTER.JAVA_EXCEPTION</code> <text>com.sap.aii.af.service.cpa.CPAObjectNotFoundException: Couldn't retrieve binding for the given channelId: Binding:CID=null; at com.sap.aii.af.service.cpa.impl.lookup.AbstractLookupManager.getBindingByChannelId(AbstractLookupManager.java:173) at com.sap.aii.adapter.soap.web.MessageServlet.doPost(MessageServlet.java:449) ... at com.sap.engine.core.thread.execution.CentralExecutor$SingleThread.run(CentralExecutor.java:327)</text> </s:SystemError> </detail> </SOAP:Fault> </SOAP:Body> </SOAP:Envelope>
In PHP, I do as follows:
$client = new SoapClient('path/to/wsdl', array(
'cache_wsdl' => WSDL_CACHE_NONE,
'exceptions' => true,
'login' => 'some_login',
'password' => 'some_password',
));
$result = $client->some_funtion("bla-bla-bla");
var_dump($result);
It prints null, but should throw an exception.
If I output the same XML (SOAP fault) in my own web service, I catch it correctly.
The problem was in output tag in WSDL. I have added this tag and it solve my problem
<wsdl:portType name="...">
<wsdl:operation name="...">
...
<wsdl:input message="..."/>
<wsdl:output message="..."/> <!--- that tag-->
</wsdl:operation>
</wsdl:portType>