2009-10-24 10 views
7

Próbuję połączyć się z internetową usługą Java z wykorzystaniem Zend_Soap_Client z v1.9.0 Zend Framework:SoapFault wyjątek: [HTTP] nieobsługiwany Typ nośnika podczas dostępu Java Web-service z PHP

<?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>'; 
?> 

Wyjścia:

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 

Każdy pomysł, co może być nie tak? Adres URL jest poprawny, ponieważ dostaję funkcje availible Dzwoniąc

$client->getFunctions() 

Odpowiedz

32

Według this listing wyjątek wskazuje, że serwer obsługujący internetową usługę nie jest zadowolony ze swojego kodowania życzenia:

Wskazuje serwer równorzędny HTTP nie obsługuje typu Content używanego do kodowania komunikatu żądania. Wymiana wiadomości jest uznawana za zakończoną bez powodzenia numerem .

Należy zatem skontaktować się z dostawcą usług internetowych w sprawie typu zawartości/kodowania, jakiego oczekują.

Ewentualnym rozwiązaniem, jeśli używasz SOAP_1_2, jest zmiana na SOAP_1_1, ponieważ spowoduje to zmianę wprowadzonych żądań.

+7

Bardziej szczegółowo: http://framework.zend.com/issues/browse/ZF-5286. Rozwiązane przez ustawienie "soap_version" => SOAP_1_1 w opcjach, dzięki czemu żądanie zostanie przekazane przez text/xml zamiast aplikacji/soap + xml –

+0

@ MadsMobæk Brilliant, rozwiązałem identyczny problem, jaki miałem. – googletorp

+1

Spróbuj dodać nagłówek Content-Type: text/xml; charset = utf-8 dla mydła 1.1 i Content-Type: application/soap + xml; charset = utf-8 dla mydła 1.2 –

5

Nie używam Zend Framework, ale miałem podobny problem z XMLHttpRequest w JavaScript. Rozwiązaniem było określenie typu zawartości w nagłówku żądania 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); 
Powiązane problemy