2009-10-24 13 views
7

Estoy intentando conectarse a un servicio web Java utilizando la Zend_Soap_Client del v1.9.0 Zend Framework:excepción SoapFault: [HTTP] no admitido Tipo de papel cuando se accede a Java servicio web desde 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>'; 
?> 

Salidas:

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 

¿Alguna idea de lo que podría estar mal? La web es correcta, ya que me da las funciones availible al llamar

$client->getFunctions() 

Respuesta

32

Según this listing, a excepción indica que el servidor que aloja el servicio web no es feliz con su solicitudes de codificación:

Indica que el servidor HTTP similar no admite el tipo de contenido utilizado para codificar el mensaje de solicitud. El intercambio de mensajes se considera que tiene completado sin éxito.

Por lo tanto, debe consultar con el proveedor del servicio web sobre el tipo de contenido/codificación que esperan.

Una posible solución si está usando SOAP_1_2 es cambiar a SOAP_1_1 ya que alterará las solicitudes realizadas.

+7

Más específico: http://framework.zend.com/issues/browse/ZF-5286. Se resolvió estableciendo 'soap_version' => SOAP_1_1 en opciones, haciendo que la solicitud fuera aprobada por text/xml en lugar de application/soap + xml –

+0

@ MadsMobæk Brilliant, resolvió un problema idéntico al que estaba teniendo. – googletorp

+1

Intente agregar encabezado Tipo de contenido: text/xml; charset = utf-8 para soap 1.1 y Content-Type: application/soap + xml; charset = utf-8 para soap 1.2 –

5

No estoy usando Zend framework, pero tuve un problema similar con XMLHttpRequest en JavaScript. La solución fue especificar el tipo de contenido en el encabezado de la solicitud 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); 
Cuestiones relacionadas