2012-08-29 17 views
5

Sto tentando di utilizzare il servizio web per recuperare i dati dal server. Seguo il tutorial specificato in http://googcloudlabs.appspot.com/codelabexercise5.html, ovviamente ho modificato il codice originale per soddisfare le mie richieste.Tipo di contenuto non supportato: text/html; charset = UTF-8 I supportati sono: [text/xml]

Ora ricevo un errore simile al seguente: Tipo di contenuto non supportato: text/html; charset = UTF-8 quelli supportati sono: [text/xml]

Per visualizzare l'errore completo, scrivo una nuova funzione di errore quando ottiene i dati:

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

E il browser avvisa l'oggetto di errore:

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

Qualcuno mi aiuti con questo problema ??

Grazie in anticipo!

risposta

0

Semplice: il tuo client (browser?) Sta inviando dati come Content-Type: text/html mentre dovrebbe essere Content-Type: application/soap+xml (per old SOAP anche Content-Type: text/xml).

Quindi, se si stanno effettuando richieste a mano, è necessario aggiungere Content-Type header alle richieste HTTP.

+0

Sì, penso di sì @Peter ma dove posso configurare le richieste HTTP, nella classe servlet o da qualche parte nella directory/war ?? – sinhzun

+0

@Peter Dove è necessario specificare l'intestazione Content-Type? La richiesta HTTP non è con me. Chiamiamo solo un metodo esposto da wsdl. Sono sicuro che mi manca qualcosa. Per favore guida. – instanceOfObject

0

Questo errore può verificarsi anche durante la composizione della richiesta SOAP e il contenuto fornito è codificato/formattato/inaccessibile in modo errato. Questo probabilmente non è il tuo caso, ma se qualcun altro incontra l'errore identico prima della inviando la richiesta, significa che i dati utilizzati per comporre il messaggio stesso o gli allegati sono codificati in modo improprio, formattati o generalmente inaccessibili.

3

Aggiungere il seguente codice nella testa della classe:

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

quindi riavviare il server.

+0

Solo per aggiungere ulteriori informazioni a questa risposta, questa annotazione fa in modo che SOAP 1.2 sia utilizzato al posto di SOAP 1.1. https://jax-ws.java.net/2.1.5/docs/soap12.html –

1

ho il mio caso, lo stesso errore, ma diverso motivo:

Il Porto non è stato specificato nel WSDL, che il server ha restituito al Servizio Java "Generator". Quindi il server Web ha risposto alla chiamata SOAP, con una homepage, che ovviamente non era testo/XML ma testo/html.

L'aggiunta della porta a wsdl ha risolto il problema.

0

Prova altri clienti. nel mio caso il problema si verifica in JDeveloper 11.1.2.0 (Http analizzatore come client) e risolto da JDeveloper 11.1.2.3 (Http analizzatore come client)

Questo problema viene dalla richiesta Content-Type

0

ho avuto anche ho riscontrato questo problema e alla fine ho scoperto che era causato dal server.

Il server è costruita su Node.js, ed era contemporaneamente usando due pacchetti multer e formidable analizzare i dati di modulo di tipo "multipart/form-data. Ciò ha causato il conflitto: il parser del modulo effettivo formidable non è in grado di ottenere i dati del modulo non elaborato a causa del fatto che lo multer lo ha già elaborato e ha ottenuto un contenuto pulito.Abbiamo rimosso multer, quindi il problema è stato risolto.

1

Questo errore mi è successo e il motivo era che la chiamata ai servizi Web è stata effettuata su un host non valido, quindi il server Web risponde con un messaggio di errore http invece di un messaggio soap xml.

Problemi correlati