Estoy usando un cliente generado por JAX-WS (usando wsimport, el que viene con Glassfish 2.1.1) para conectarme a un servicio web generado ASP.NET que se ejecuta en un IIS 6.
Cuando solicito compresión en la respuesta (mediante la inclusión de encabezado HTTP Accept-Encoding: gziptravés de JAX-WS SOAP de Manipuladores de) los IIS 6 respuestas con una respuesta comprimida, pero no incluye la Content-Encoding: gzip encabezado de respuesta HTTP, por lo que obtener la siguiente excepción:Java: ¿Hay alguna manera de cambiar los encabezados de respuesta HTTP recibidos?
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)
Editado Abr 17 de, 2011
También he intentado, utilizando el mismo SOAPHandler utilizo para solicitar respuesta comprimido, para modificar las encabezados de respuesta, sino la excepción se produce antes de que el gestor se llama.
Edición del 17 de Abr, 2011
Además, cuando hago la misma petición al servicio Web a través soapUI 3.6.1 con la preferencia "Aceptar respuestas comprimidos de los ejércitos", que se puede ver lo que he dicho: el servidor IIS 6 no está incluyendo el encabezado de respuesta HTTP para la compresión y soapUI muestra la respuesta como 'datos binarios' y muestra estas cabeceras de respuesta:
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
Si -con soapUI- no lo hago solicitar respuesta comprimida obtengo la siguiente respuesta Tamaño:
Content-Length: 2665
Por lo tanto, la pregunta aquí es, como he dicho, que IIS6 no es la adición de la cabecera Contended-Encoding en la respuesta. Mi pregunta es: ¿es posible agregar -programadamente- el encabezado Content-Encoding? O bien, también podría ser: ¿es posible solicitarle a IIS6 que incluya el encabezado Content-Encoding?
ACTUALIZACIÓN
con Charles web proxy de depuración 3.5.2 He confirmado la respuesta de IIS6 no incluye el Content-Encoding cabecera:
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
supongo que esto puede ser un problema más relacionado con el servicio web que con IIS 6
Ha buscado informes de errores? Esto parece ser un error grave en IIS, ya que viola claramente las especificaciones de HTTP 1.1. No creo que sea posible hackear el encabezado desde el lado del cliente ya que todo el procesamiento HTTP se realiza una vez que el control llega a su código. – musiKk
Hola @musiKk, he visto [aquí] (http://forums.iis.net/t/1160183.aspx) en el último comentario: "He comentado que en el encabezado de respuesta faltan dos entidades: Variar Aceptar codificación y codificación de contenido gzip " –
¿Puede usar Apache CXF como su proveedor JAX-WS? Puede ser posible con CXF pero si estás atrapado con el RI no me molestaré en investigar. – mtpettyp