我使用JAX-WS生成的客户端(使用wsimport,与Glassfish 2.1.1捆绑在一起)连接到在IIS 6中运行的ASP.NET生成的WebService。
当我在响应中请求压缩时通过包括HTTP标头接受编码:gzip通过JAX-WS SOAP处理程序)IIS 6回答压缩响应,但不包括内容编码:gzip HTTP响应标题,所以我得到以下例外:Java:有没有更改接收到的HTTP响应头的方法?
com.sun.xml.ws.protocol.soap.MessageCreationException: Couldn't create SOAP message due to exception: XML reader error: com.sun.xml.stream.XMLStreamException2: ParseError at [row,col]:[1,1]
Message: Content is not allowed in prolog.
at com.sun.xml.ws.encoding.SOAPBindingCodec.decode(SOAPBindingCodec.java:361) at com.sun.xml.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:173)
at com.sun.xml.xwss.XWSSClientPipe.process(XWSSClientPipe.java:160)
at com.sun.xml.ws.api.pipe.helper.PipeAdapter.processRequest(PipeAdapter.java:115)
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:595)
at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:554)
at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:539)
at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:436)
at com.sun.xml.ws.client.Stub.process(Stub.java:248)
at com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:135)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:109)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:89)
at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:118)
编辑的2011年4月17日
我也试过,使用相同的 SOAPHandler我用请求 压缩响应,修改 响应头,但异常 发生处理程序被调用之前。
编辑完2011年4月17日
此外,当我做出过的soapUI 3.6.1 WebService的与爱好相同的请求“接受来自主机压缩响应”,我可以看到我已经说过:所述IIS 6服务器不包括HTTP响应头进行压缩,和的soapUI显示了响应为‘二进制数据’,并显示这些响应头:
HTTP/1.1 200 OK
Date: Wed, 13 Apr 2011 08:50:55 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Cache-Control: private, max-age=0
Content-Type: text/xml; charset=utf-8
Content-Length: 1104
如果 - 附soapUI-我不请求压缩的响应我得到下一个响应大小:
Content-Length: 2665
因此,这里的问题是,正如我所说的,IIS6没有在响应中添加Contend-Encoding标头。 我的问题是:是否可以通过编程方式添加Content-Encoding标头?或者,它也可能是:是否有可能要求IIS6包含Content-Encoding标头?
UPDATE
使用查尔斯Web调试代理3.5.2我已确认从IIS6响应不包括内容编码头:
HTTP/1.1 200 OK
Date Wed, 13 Apr 2011 10:51:53 GMT
Server Microsoft-IIS/6.0
X-Powered-By ASP.NET
X-AspNet-Version 2.0.50727
Cache-Control private, max-age=0
Content-Type text/xml; charset=utf-8
Content-Length 1110
我猜这可能是与WebService相关的问题,而不是IIS 6
你看bug报告?这看起来像是IIS中的一个严重错误,因为它显然违反了HTTP 1.1规范。我不认为有可能从客户端入侵头部,因为一旦控制权到达您的代码,所有的HTTP处理都会完成。 – musiKk 2011-04-13 09:36:52
嗨@musiKk,我在最后一条评论中看到了[这里](http://forums.iis.net/t/1160183.aspx):“我已经说过,在响应标题上,有两个实体缺失:Vary接受编码和内容编码gzip“ – 2011-04-13 10:19:18
你可以使用Apache CXF作为你的JAX-WS提供者吗? CXF可能是有可能的,但如果你被RI困住了,我就不会去调查了。 – mtpettyp 2011-04-26 20:18:58