Исключение SoapFault: [HTTP] Неподдерживаемый тип медиа при доступе к веб-сервису Java из PHP - PullRequest
7 голосов
/ 24 октября 2009

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

<code><?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() . '
'; ?>

Выходы:

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()

Ответы [ 2 ]

37 голосов
/ 26 октября 2009

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

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

Так что вам следует уточнить у провайдера веб-услуг, какой тип контента / кодировка они ожидают.

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

6 голосов
/ 11 июня 2015

Я не использую Zend Framework, но у меня была похожая проблема с 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);
...