2012-08-29 12 views
5

Próbuję użyć usługi internetowej do pobierania danych z serwera. Postępuję zgodnie z instrukcją podaną w http://googcloudlabs.appspot.com/codelabexercise5.html, oczywiście zmodyfikowałem oryginalny kod, aby spełnić moje wymagania.Nieobsługiwany typ zawartości: tekst/html; charset = UTF-8 Obsługiwane są: [text/xml]

Teraz pojawia się błąd podobny do tego: Nieobsługiwany typ zawartości: tekst/html; charset = UTF-8 Obsługiwane są: [text/xml]

Aby zobaczyć pełną błędów, piszę nową funkcję błędu podczas pobierania danych:

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

a przeglądarka poinformowanie obiektu o błędzie:

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

Ktoś mi pomoże z tym problemem?

Z góry dziękuję!

Odpowiedz

0

Prosty: Twój klient (przeglądarka?) Wysyła dane jako Content-Type: text/html, podczas gdy powinno być Content-Type: application/soap+xml (dla old SOAP również Content-Type: text/xml).

Jeśli więc zamawiasz ręcznie, dodaj do swoich żądań HTTP Content-Type header.

+0

Tak, myślę, że @Peter, ale gdzie mogę skonfigurować żądania HTTP, w klasie serwletu lub gdzieś w katalogu/wojen? – sinhzun

+0

@Peter Gdzie należy podać nagłówek Content-Type? Żądanie HTTP nie jest ze mną. Po prostu wywołujemy odsłoniętą metodę z wsdl. Jestem pewien, że czegoś brakuje. Proszę przewodnika. – instanceOfObject

0

Ten błąd może również wystąpić podczas tworzenia żądania SOAP, a dostarczona zawartość jest nieprawidłowo zakodowana/sformatowana/niedostępna. Prawdopodobnie tak nie jest w twoim przypadku, ale jeśli ktoś inny napotka identyczny błąd przed wysłaniem żądania, oznacza to, że dane użyte do skomponowania samej wiadomości lub są niepoprawnie zakodowane, sformatowane lub ogólnie niedostępne.

3

Dodaj poniższy kod w głowie klasy:

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

Następnie uruchom ponownie serwer.

+0

Aby dodać więcej informacji do tej odpowiedzi, ta adnotacja gwarantuje, że SOAP 1.2 jest używany zamiast protokołu SOAP 1.1. https://jax-ws.java.net/2.1.5/docs/soap12.html –

1

I moim przypadku, ten sam błąd, ale z innego powodu:

port nie został określony w WSDL, który serwer oddał do obsługi Java „Generator”. Dlatego serwer WWW odpowiedział na wywołanie SOAP ze stroną główną, która oczywiście nie była tekstem/XML, ale tekstem/html.

Dodanie portu do klucza wsdl rozwiązało problem.

0

Wypróbuj innych klientów. w moim przypadku problem występuje w JDeveloper 11.1.2.0 (http analizator jako klient) i rozwiązane przez JDeveloper 11.1.2.3 (http analizatora jako klient)

Problem ten pochodzi z żądania Content-Type

0

miałem również napotkał ten problem, a na końcu dowiedziałem się, że został spowodowany przez serwer.

Serwer jest zbudowany na node.js, a jednocześnie był stosując dwa pakiety multer i formidable do analizowania 'multipart/form-data' dane Typ formularza. To spowodowało konflikt: rzeczywisty parser formularza formidable nie może pobrać danych formularza surowego, ponieważ multer już to przetworzył i dostał czystą treść.Usunęliśmy multer, wtedy problem został rozwiązany.

1

Ten błąd się zdarzył, a powodem było, że połączenie z serwisem internetowym zostało wykonane na niepoprawnym hoście, więc serwer WWW odpowiada wiadomością o błędzie http zamiast wiadomości mydlanej xml.

Powiązane problemy