2012-08-29 65 views
5

Estoy intentando utilizar el servicio web para recuperar datos del servidor. Sigo el tutorial especificado en http://googcloudlabs.appspot.com/codelabexercise5.html, por supuesto que he modificado el código original para satisfacer mis demandas.Tipo de contenido no admitido: text/html; charset = UTF-8 Los compatibles son: [text/xml]

Ahora aparece un error como este: Tipo de contenido no soportado: text/html; charset = UTF-8 soportados cuáles son: [text/xml]

Para ver el error completo, escribo una nueva función de error al obtener los datos:

var errorFn = function(e){ 

    for(var p in e){ 
    alert(e[p]); 
    } 
} 

var successFn = function(resp){ 

    var data=''; 
    if(resp){ 
    //getting the data from the response object 
     data=resp.data;   
    } 

     //Some other code here... 

} 

getData("/entity",null,successFn,errorFn); 

y el navegador alertar al objeto de error:

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/> 
<title>Error 500 Unsupported Content-Type: text/html; charset=UTF-8 Supported ones are: [text/xml]</title> 
</head> 
<body><h2>HTTP ERROR 500</h2> 
<p>Problem accessing /vehicle. Reason: 
<pre> Unsupported Content-Type: text/html; charset=UTF-8 Supported ones are: [text/xml]</pre></p><h3>Caused by:</h3><pre>com.sun.xml.internal.ws.server.UnsupportedMediaException: Unsupported Content-Type: text/html; charset=UTF-8 Supported ones are: [text/xml] 

    at com.sun.xml.internal.ws.encoding.StreamSOAPCodec.decode(Unknown Source) 

    at com.sun.xml.internal.ws.encoding.StreamSOAPCodec.decode(Unknown Source) 

    at com.sun.xml.internal.ws.encoding.SOAPBindingCodec.decode(Unknown Source) 

    at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(Unknown Source) 

    at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(Unknown Source) 

    at com.sun.xml.internal.ws.transport.DeferredTransportPipe.processRequest(Unknown Source) 

    at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Unknown Source) 

    at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Unknown Source) 

    at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Unknown Source) 

    at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Unknown Source) 

    at com.sun.xml.internal.ws.client.Stub.process(Unknown Source) 

    at com.sun.xml.internal.ws.client.sei.SEIStub.doProcess(Unknown Source) 

    at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(Unknown Source) 

    at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(Unknown Source) 

    at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(Unknown Source) 

    at $Proxy32.getAllVehicles(Unknown Source) 

    at com.google.appengine.codelab.soap.client.VehicleServlet.doGet(VehicleServlet.java:52) 

    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 

    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 

    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 

    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) 

    at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:35) 

    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 

    at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:60) 

    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 

    at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) 

    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 

    at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125) 

    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 

    at com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:97) 

    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 

    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) 

    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 

    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 

    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 

    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) 

    at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:94) 

    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 

    at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:370) 

    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 

    at org.mortbay.jetty.Server.handle(Server.java:326) 

    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 

    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923) 

    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547) 

    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) 

    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 

    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) 

    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) 

</pre> 
<hr /><i><small>Powered by Jetty://</small></i><br/>             
<br/>             
<br/>             
<br/>             
<br/>             
<br/>             
<br/>             
<br/>             
<br/>             
<br/>             
<br/>             
<br/>             
<br/>             
<br/>             
<br/>             
<br/>             
<br/>             
<br/>             
<br/>             
<br/>             

</body> 
</html> 

¿Alguien me ayude con este problema?

¡Gracias de antemano!

Respuesta

0

Simple: su cliente (¿navegador?) Está enviando datos como Content-Type: text/html mientras que debería ser Content-Type: application/soap+xml (para old SOAP también Content-Type: text/xml).

Por lo tanto, si realiza solicitudes manualmente, debe agregar el Content-Type header a sus solicitudes HTTP.

+0

Sí, creo que sí @Peter, pero ¿dónde puedo configurar las solicitudes HTTP, en la clase servlet o en algún lugar del directorio/war ?? – sinhzun

+0

@Peter ¿Dónde necesitamos especificar el encabezado Content-Type? La solicitud HTTP no está conmigo. Simplemente llamamos a un método expuesto de wsdl. Estoy seguro de que me falta algo. Por favor guía. – instanceOfObject

0

Este error también puede ocurrir al redactar la solicitud SOAP y el contenido proporcionado está incorrectamente codificado/formateado/inaccesible. Probablemente este no sea el caso del suyo, pero si alguien encuentra el mismo error antes de enviando la solicitud, significa que los datos utilizados para redactar el mensaje o sus datos adjuntos están incorrectamente codificados, formateados o generalmente inaccesibles.

3

Agregue el código siguiente en la cabeza de la clase:

@BindingType("http://java.sun.com/xml/ns/jaxws/2003/05/soap/bindings/HTTP/") 

reinicie el servidor.

+0

Solo para agregar más información a esta respuesta, esta anotación asegura que se use SOAP 1.2 en lugar de SOAP 1.1. https://jax-ws.java.net/2.1.5/docs/soap12.html –

1

I mi caso, el mismo error, pero diferentes razones:

El puerto no se especificó en el WSDL, que el servidor devolvió al servicio de Java "generador". Por lo tanto, el servidor web respondió la llamada SOAP, con una página principal, que por supuesto no era texto/XML, sino texto/html.

Agregar el puerto al wsdl resolvió el problema.

0

Pruebe con otros clientes. en mi caso el problema se produce en JDeveloper 11.1.2.0 (analizador de HTTP como cliente) y resuelto por Jdeveloper 11.1.2.3 (analizador de HTTP como cliente)

Este problema viene de solicitud Content-Type

0

también tenía encontré este problema, y ​​finalmente descubrí que fue causado por el servidor.

El servidor está construido sobre Node.js, y fue simultáneamente utilizando dos paquetes multer y formidable para analizar '/ form-data' de varias partes de datos de formulario tipo. Eso causó el conflicto: el analizador de formulario real formidable no puede obtener los datos del formulario sin procesar porque multer ya lo ha procesado y obtuvo un contenido limpio.Eliminamos multer, entonces el problema fue resuelto.

1

Este error me ha sucedido y la razón fue que la llamada a los servicios web se realizó a un host inválido, por lo que el servidor web responde con un mensaje de error http en lugar de un mensaje xml soap.

Cuestiones relacionadas