gvSIG bugs #2931

Error con WMS

Added by Álvaro Anguix over 9 years ago. Updated over 9 years ago.

Status:Closed% Done:

0%

Priority:NormalSpent time:-
Assignee:Joaquín del Cerro Murciano
Category:WMS
Target version:2.1.0-2258-testing
Severity:Minor Add-on version:
gvSIG version:2.1.0 Add-on build:
gvSIG build:2257 Add-on resolve version:
Operative System: Add-on resolve build:
Keywords: Proyecto:
Has patch:Yes Hito:
Add-on name:Unknown

Description

El WMS del servicio cartográfico de Polonia no lo carga:
http://mapy.geoportal.gov.pl/wss/service/img/guest/ORTO/MapServer/WMSServer

Adjunto log

gvSIG.log (354 KB) Álvaro Anguix, 10/21/2014 09:52 AM

wms-remote-client.patch Magnifier (3.56 KB) Cesar Martinez Izquierdo, 10/29/2014 03:37 PM

gvSIG.log (384 KB) Álvaro Anguix, 11/24/2014 08:26 AM


Related issues

Related to Application: gvSIG desktop - gvSIG bugs #3018: No conecta con servidor WMS Closed 11/22/2014

Associated revisions

Revision 41817
Added by Joaquín del Cerro Murciano over 9 years ago

Error con WMS, refs #2931 (cmartinez)

Revision 41838
Added by Joaquín del Cerro Murciano over 9 years ago

refs #3018. Corregido un problema al acceder a algunos servicios WMS tras aplicar el parche refs #2931.

History

#1 Updated by Cesar Martinez Izquierdo over 9 years ago

  • Has patch set to Yes
  • File wms-remote-client.patch added

El servidor está enviando un error a propósito si la conexión usa un User-Agent que contenga la palabra "Java".
Adjunto un parche que utiliza el siguiente user agent: "Mozilla/5.0 (gvSIG) like Gecko", que es similar al que usan la mayoría de navegadores:

Chrome 19
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5

FireFox 13
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1

Safari 5.1
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2

Opera 11
Opera/9.80 (Windows NT 5.1; U; en) Presto/2.10.229 Version/11.60

IE9
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)

IE8
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; en-GB)

IE7
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)

IE6
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)

#2 Updated by Cesar Martinez Izquierdo over 9 years ago

  • File deleted (wms-remote-client.patch)

#4 Updated by Álvaro Anguix over 9 years ago

  • Target version set to 2.1.0-2259-rc3
  • Assignee set to Joaquín del Cerro Murciano

#5 Updated by Joaquín del Cerro Murciano over 9 years ago

  • Target version changed from 2.1.0-2259-rc3 to 2.1.0-2255-testing

#6 Updated by Joaquín del Cerro Murciano over 9 years ago

  • Status changed from New to Fixed

#7 Updated by Joaquín del Cerro Murciano over 9 years ago

#8 Updated by Álvaro Anguix over 9 years ago

  • gvSIG build changed from 2252 to 2257
  • Target version changed from 2.1.0-2255-testing to 2.1.0-2259-rc3
  • Status changed from Fixed to New
  • File gvSIG.log added

Me sigue dando error en el 2257
Adjunto log.

#9 Updated by Cesar Martinez Izquierdo over 9 years ago

Hola, veo en el cambio asociado del SVN que no se ha aplicado el parche completo, ya que afectaba a WMSProtocolHandlerFactory.java y a SEDownloaderTask.java, pero sólo se ha aplicado la parte correspondiente a WMSProtocolHandlerFactory.

Por otra parte Joaquín no entiendo porqué se usa readFully en vez de read en WMSProtocolHandlerFactory. Ya me imagino que hay una razón detrás (ya que lo has restaurado de esta forma), pero me cuesta entenderlo, porque según la definición de readFully se lanza una excepción (EOFException) si los datos del input stream son menores que el tamaño del buffer, por lo que entiendo que si hay un getCapabilities muy corto no se leería correctamente.

#10 Updated by Joaquín del Cerro Murciano over 9 years ago

Cesar Martinez Izquierdo wrote:

Hola, veo en el cambio asociado del SVN que no se ha aplicado el parche completo, ya que afectaba a WMSProtocolHandlerFactory.java y a SEDownloaderTask.java, pero sólo se ha aplicado la parte correspondiente a WMSProtocolHandlerFactory.

Uppsss, lo del SEDownloaderTask se me ha escapado al hacer una vuelta atras en mi workspace de ese proyecto.
Lo vuelvo a meter.

Por otra parte Joaquín no entiendo porqué se usa readFully en vez de read en WMSProtocolHandlerFactory. Ya me imagino que hay una razón detrás (ya que lo has restaurado de esta forma), pero me cuesta entenderlo, porque según la definición de readFully se lanza una excepción (EOFException) si los datos del input stream son menores que el tamaño del buffer, por lo que entiendo que si hay un getCapabilities muy corto no se leería correctamente.

Pues lo de la excepcion con un capabilities corto no se me habia ocurrido.
He restaurado el readFully por que el read normal salta cuando se terminan de leer los datos que hay en ese momento en el socket. Esto ocasiona que si llegan fragmentado el capabilities en varios paquetes y entre alguno de ellos hay un retardo, salte el read sin leer los datos. Nos estaba pasando con un servidor que solo se leian unos 50 caracteres y el resto del buffer a ceros por que saltaba el read al no haber mas caracteres que leer, y sin embargo el readfully se esperaba a que estuviesen todos. Basicamente lo he dejado por que antes iba, pero por lo que comentas tambien puede ser fuente de problemas. Habra que repasarlo...

De todos modos deberia eliminarse ese codigo de WMSProtocolHandlerFactory para pasar a usar solo el Downloader, ya vere a ver como me las arreglo con esto.

#11 Updated by Joaquín del Cerro Murciano over 9 years ago

  • Target version changed from 2.1.0-2259-rc3 to 2.1.0-2258-testing

#12 Updated by Cesar Martinez Izquierdo over 9 years ago

Hola Joaquín, una solución al problema del read/readFully sería envolver el DataInputStream con un BufferedInputStream y usar el método read de este último:
https://docs.oracle.com/javase/7/docs/api/java/io/BufferedInputStream.html#read%28byte[],%20int,%20int%29
Según la documentación, llama a read las veces que sea necesario hasta que se obtenga un EOF o se lea el número de bytes requeridos.

#13 Updated by Joaquín del Cerro Murciano over 9 years ago

  • Status changed from New to Fixed

#14 Updated by Joaquín del Cerro Murciano over 9 years ago

Cesar Martinez Izquierdo wrote:

Hola Joaquín, una solución al problema del read/readFully sería envolver el DataInputStream con un BufferedInputStream y usar el método read de este último:
https://docs.oracle.com/javase/7/docs/api/java/io/BufferedInputStream.html#read%28byte[],%20int,%20int%29
Según la documentación, llama a read las veces que sea necesario hasta que se obtenga un EOF o se lea el número de bytes requeridos.

Bastante mas seguro que lo del readFully.
Ya esta metido.

Gracias.

#15 Updated by Álvaro Anguix over 9 years ago

  • Status changed from Fixed to Closed

Also available in: Atom PDF