Исключение SoapFault: Неподдерживаемый тип носителя при доступе к веб-сервису Java с PHP

Я пытаюсь подключиться к веб-сервису Java, используя Zend_Soap_Client из Zend Framework v1.9.0:

 <?php include( 'Zend/Loader/Autoloader.php'); $autoloader = Zend_Loader_Autoloader::getInstance(); $client = new Zend_Soap_Client('https://webservice.com/webservice-war/webservice?wsdl' , array('encoding'=> 'UTF-8')); try{ $result = $client->find_customer(array('username' => 'user', 'password' => '123'), array('city' => 'some city')); } catch(Exception $e){ echo $e; } echo '<pre>' . $client->getLastRequestHeaders() . '</pre>'; ?> 

Выходы:

 SoapFault exception: [HTTP] Unsupported Media Type in /Library/ZendFramework-1.9.0/library/Zend/Soap/Client.php:937 Stack trace: #0 [internal function]: SoapClient->__doRequest('_doRequest(Object(Zend_Soap_Client_Common), '__doRequest('__soapCall('find_customer', Array, NULL, NULL, Array) #6 [internal function]: Zend_Soap_Client->__call('find_customer', Array) #7 /Users/webservicetest/index.php(8): Zend_Soap_Client->find_customer(Array, Array) #8 {main} POST /webservice-war/webservice HTTP/1.1 Host: webservice.com Connection: Keep-Alive User-Agent: PHP-SOAP/5.2.6 Content-Type: application/soap+xml; charset=utf-8; action="" Content-Length: 315 

Любая идея, что может быть неправильным? Правильный URL-адрес, так как я получаю доступные функции при вызове

 $client->getFunctions() 

Согласно этому списку исключение указывает, что сервер, на котором размещен веб-сервис, недоволен кодировкой ваших запросов:

Указывает, что одноранговый HTTP-сервер не поддерживает Content-type, используемый для кодирования сообщения запроса. Обмен сообщениями считается безуспешным.

Поэтому вам следует обратиться к поставщику веб-услуг относительно ожидаемого типа контента / кодировки.

Возможным решением, если вы используете SOAP_1_2 является переход на SOAP_1_1 поскольку это изменит сделанные запросы.

Я не использую фреймворк Zend, но имел аналогичную проблему с XMLHttpRequest в JavaScript. Решение заключалось в том, чтобы указать Content-Type в заголовке запроса SOAP.

 var sr = '<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.w3schools.com/webservices/"> <SOAP-ENV:Body><ns1:CelsiusToFahrenheit><ns1:Celsius>32</ns1:Celsius></ns1:CelsiusToFahrenheit></SOAP-ENV:Body></SOAP-ENV:Envelope>'; http_request = new XMLHttpRequest(); http_request.open('POST', 'http://www.w3schools.com/webservices/tempconvert.asmx', true); http_request.setRequestHeader("Content-Type", "text/xml; charset=utf-8"); http_request.send(sr);