Problema con"Ñ" en Webservice en glassfish

2,083 views
Skip to first unread message

NachXs

unread,
Dec 1, 2010, 9:23:42 AM12/1/10
to jav...@googlegroups.com
Hola Estimados, que tal como les va.
Queria hacerles una consulta sobre un inconveniente que se me esta presentando trabajando con Webservices sobre Glassfish, les comento:
Tengo desarrollado un WebService que esta enviando peticiones a otro servicio de forma remota. Este envia una cadena y recibe como respuesta otra cadena, pero resulta que si en la cadena de respuesta existe una "Ñ" o algun otro caracter no convencional, se reciben caracteres extraños.
Estube revisando en el log de glassfish especificamente en las peticiones y veo en la cabecera de la peticion un Charset=UTF-8, hasta donde tengo entendido este charset es el mas estandar y no deberia ocurrir.

Tal vez alguno que me pudiera brindar alguna sugerencia de solucion??

Gracias de antemano

Saludos.

--
NachXs
http://nachxs.wordpress.com

TuRoCaBrErA

unread,
Dec 1, 2010, 1:08:01 PM12/1/10
to JavaSOS

y desde el envio no te pueden enviar los datos de esta manera?

\u00f3 ó
\u00e1 á
....

Jorge Medina

unread,
Dec 1, 2010, 11:03:35 PM12/1/10
to jav...@googlegroups.com
Lo primero es averiguar en donde esta ocurriendo el error de codificación.
Pero se requiere más información para poder ayudarte.

Por ejemplo, si el servicio al que realizas la peticion esta leyendo
contenidos de un archivo de texto producido en una máquina Windows,
entonces lo más probable es que en la lectura no se este realizando
con el código de characteres adecuado. Por ejemplo, pueden ester
leyendo el archivo como si estuviera codificado en UTF-8 pero quizá
deba ser leido en ISO-8859-1.

O puede ser que tú estes guardando la información recibida -que
pudiera ser correcta- y que quieras verificarla en "Notepad" sin haber
especificado al abrir el archivo que debe ser interpretado como UTF-8.

Todo depende de la fuente original de la cadena y de como se generó y
como se interpreta al leerla (que código de caracteres se utiliza al
grabarla y leerla)

Verifica en el debugger de tu IDE que la cadena recibida contiene los
caracteres esperados.
Si en el debugger aparece de manera correcta, entonces el problema
esta en tú aplicación.
Por el contrario, si en el debugger la cadena ya aparece alterada,
entonces el servicio al que estas llamando tiene un error y tendrías
que averiguar la fuente original de los datos.


2010/12/1 NachXs <nac...@gmail.com>:

> --
> www.JavaSOS.com
> Grupo de colaboración Java/J2ee para desarrolladores de habla hispana.

NachXs

unread,
Dec 2, 2010, 6:24:49 PM12/2/10
to jav...@googlegroups.com
Hola Jorge, agradezco tu respuesta.
Instale un sniffer (Wireshark), para ver como llega la cadena y veo toda la cadena como valor Hexadecimal y este caracter es D1, que en decimal es 209, que en valor ascii seria justamente la letra Ñ, pero en el sniffer como caracter veo un "punto" y en netbeans que es el IDE que utilizo veo un "?".

Quisera cambiar el encoding de UTF-8 a ISO-8859-1, pero estoy revisando dentro de las propiedades del IDE para poder hacerlo y no ubico alguna opcion, tal vez me podrian dar alguna sugerencia?

Seguire buscando

Gracias de antemano.
--
NachXs
http://nachxs.wordpress.com

NachXs

unread,
Dec 2, 2010, 6:27:07 PM12/2/10
to jav...@googlegroups.com
Disculpen veo que me falto especificar, cuando digo:


"Quisera cambiar el encoding de UTF-8 a ISO-8859-1, pero estoy revisando dentro de las propiedades del IDE para poder hacerlo y no ubico alguna opcion, tal vez me podrian dar alguna sugerencia?
"
Me refiero a cambiar el encoding del WebService, he intentando con los archivos XML de configuracion (web.xml, sun-web.xml), pero no obtengo resultado positivo

Gracias
--
NachXs
http://nachxs.wordpress.com

Jorge Medina

unread,
Dec 2, 2010, 9:10:09 PM12/2/10
to jav...@googlegroups.com
La tabla ASCII solo contiene caracteres en el rango 0 a 127

Si el sniffer te muestra el valor 209, entonces éste corresponde a la
Ñ en ISO-8859-1 o en UTF-16 si esta precedido por 00.

La Ñ en UTF-8 es representada por dos bytes cuyos valores
hexadecimales son C3 91

Entonces, el servicio al que estas llamando NO esta utilizando
codificacion UTF-8.

¿que es lo que recibes del webservice ? ¿utilizas SOAP? ¿REST?
Si utilizas SOAP, ¿cual es el tipo de dato que recibes segun el WSDL?
xsd:string ?

¿puedes describir que hace el servicio al que llamas? ¿tienes detalles
de su implementación? ¿puedes cambiar el código?
A mi parecer, el error esta en el servicio al que llamas, no en tu aplicación.


2010/12/2 NachXs <nac...@gmail.com>:

william aguirre

unread,
Dec 2, 2010, 11:03:44 PM12/2/10
to jav...@googlegroups.com
Trata utilizando URLEncode, o podes codificarlo a base64, si es xml
utiliza CDATA y verifica que la cadena que se este generando con UTF-8.

Saludos.

NachXs

unread,
Dec 3, 2010, 10:58:00 AM12/3/10
to jav...@googlegroups.com

Hola Jorge, ante todo agradecerte el tiempo que te tomar para poder responder.


Mas o menos este es el detalle de todo el proceso


ESQUEMA Y ESPECIFICACION:

1.       CLIENTE: Power Builder 10.5

2.       WEBSERIVCE_01 : JAX-WS, SOAP

3.       WEBSERVICE_02 : JAX-WS, SOAP

4.       SERVICIO REMOTO: Aplicación conectada a través sockets

FLUJO

  • El WS_01 recibe una petición del cliente como cadena, esa cadena la procesa (realiza varios procesos) y envía una nueva cadena procesada al WS_02
  • El WS_02 procesa la cadena recibida (realiza varios procesos también) y vuelve a enviar una nueva cadena procesada al servicio remoto, en este servicio remoto no tenemos incidencia, se trabaja mediante una conexión a través de sockets según tengo entendido.
  • El WS_02, recibe la cadena de respuesta  y es allí donde se ve el carácter “extraño”, entonces cuando yo envio la respuesta al WS_01 alli es donde estoy teniendo problemas.

Entonces en base a lo que me indicas sobre el encoding el WS_02 debería tener el mismo encoding que el Servicio Remoto que en este caso sería la ISO-8859-1.


Y allí es donde va mi consulta; ¿como podria realizar este cambio de encoding en el WS_02? para que este pueda reconocer el caracter como tal y poder enviar la respuesta al WS_01 y luego al cliente.

Recalco que en el WS_01 y WS_02 tengo incidencia y si podria modificar el codigo. Imagino que el WS_01 tambien deberia tener el mismo encoding

Gracias por tu atencion
Saludos.

Jorge Medina

unread,
Dec 3, 2010, 7:53:50 PM12/3/10
to jav...@googlegroups.com
Si tu comunicación del WS2 con el servicio remoto es a través de
sockets, entonces la conversion de los bytes leidos a través del
socket a cadena de caracteres debe realizarse en el encoding adecuado.
¿cual es la codificación utlizada por el servicio remoto?

in = new BufferedReader(new InputStreamReader(socket.getInputStream()
, "ISO-8859-1"));
myString = in.readLine();


Si el código arriba funciona, entonces no tienes que hacer cambios al WS1.


2010/12/3 NachXs <nac...@gmail.com>:

Joaquín Robles

unread,
Dec 1, 2010, 2:36:59 PM12/1/10
to jav...@googlegroups.com
Hola,

No me queda muy claro si estás desarrollando un cliente que corre sobre Glassfish y que consume un WS que está desplegado en un servidor remoto, o tu eres el que ofrece el WS y desde otro servidor remoto se está invocando tu WS.

por otro lado, cuando dices que se reciben caracteres extraños, ¿a que te refieres exactamente? ¿has visto el xml de respuesta en un editor? ¿pintas en una página el resultado directamente? ¿lo has visto depurando?

Dependiendo de las respuestas, puede ser que tu página esté codificada con otro juego de caracteres, o que hayas compilado tu clase con otro juego de caracteres, o que el editor con el que estás viendo el mensaje de respuesta utilice un juego de caracteres distintos.

Reply all
Reply to author
Forward
0 new messages