2012-08-29 301 views
5

我在尝试使用Web服务从服务器检索数据。我遵循http://googcloudlabs.appspot.com/codelabexercise5.html中指定的教程,当然我修改了原始代码以满足我的要求。不支持的Content-Type:text/html; charset = UTF-8支持的是:[text/xml]

现在我收到了这样的错误:Unsupported Content-Type:text/html;字符集= UTF-8支持的是:[文/ XML]

要查看完整的错误,我得到的数据时,写一个新的误差函数:

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

和浏览器提示错误对象:

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

有人帮我解决这个问题吗?

提前致谢!

回答

0

简单:您的客户端(浏览器?)发送的数据为Content-Type: text/html,而它应该是Content-Type: application/soap+xml(对于old SOAP也是Content-Type: text/xml)。

因此,如果您手动提出请求,则应将Content-Type header添加到您的HTTP请求中。

+0

是的我认为是@Peter,但我可以在哪里配置HTTP请求,在servlet类或/ war目录中的某处? – sinhzun

+0

@Peter我们需要在哪里指定Content-Type头? HTTP请求不在我身边。我们只是从wsdl调用一个暴露的方法。 我相信我失去了一些东西。请指导。 – instanceOfObject

0

编写SOAP请求时也会发生此错误,并且提供的内容编码不正确/格式不正确/无法访问。这可能不是您的情况,但如果其他人在发送请求之前遇到相同的错误,这意味着用于撰写邮件本身或其附件的数据被错误地编码,格式化或通常不可访问。

3

添加以下代码在类的头:

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

然后重新启动服务器。

+0

只需为此答案添加更多信息,此注释将确保使用SOAP 1.2而不是SOAP 1.1。 https://jax-ws.java.net/2.1.5/docs/soap12.html –

1

我我的情况下,同样的错误,但不同的原因:

港未在WSDL中指定,该服务器还给Java服务“发电机”。 因此,Web服务器用主页回答了SOAP调用,这当然不是text/XML,而是text/html。

将端口添加到wsdl解决了问题。

0

尝试其他客户。 在我的情况在JDeveloper 11.1.2.0出现问题(HTTP分析器客户端)和11.1.2.3 Jdeveloper中(HTTP分析器客户端)

这个问题来自于请求的Content-Type

0

我也有解决遇到了这个问题,最后我发现这是由服务器造成的。

服务器是建立在Node.js的,并且是同时采用两个封装multerformidable解析 '的multipart/form-data的' 类型的表单数据。这导致了冲突:实际的表单解析器formidable无法获取原始表单数据,因为multer已经处理该表单并获得了干净的内容。我们删除了multer,然后问题解决了。

1

这个错误发生在我身上,原因是对web服务器的调用是由一个无效的主机发出的,所以web服务器响应一个http错误消息而不是xml soap消息。