Fóruns

Início » Liferay Portal » Español » 3. Desarrollo

Visualização combinada Visão plana Exibição em árvore
Tópicos [ Anterior | Próximo ]
toggle
Moisés Belda
JSON services response ISO-8859
13 de Fevereiro de 2013 09:03
Resposta

Moisés Belda

Ranking: Junior Member

Mensagens: 61

Data de entrada: 25 de Janeiro de 2011

Mensagens recentes

Hola!

He creado un web service json siguiendo los pasos de la documentación oficial. Lo he hecho con acceso publico sin autentificación para hacer pruebas.
Se accede por get con una url tipo REST.=> Ejemplo: http://localhost:8080/portlet/api/jsonws/obtenerCadena/parametro1/valor1/parametro2/valor2

En su Servicio Remoto asociado (CadenasServiceImpl) he creado la función adecuada que acepta dos valores y monta un objeto JSON de respuesta. En el web.xml del portlet, he hecho las definiciones adecuadas para que acceda a este. El servicio funciona perfectamente, y me devuelve la cadena JSON esperada. El problema es que la respuesta siempre me la devuelve en ISO-8859. La solicitud se envía en UTF-8, e incluso fuerzo la llamada con Content-Type: text/plain; charset=utf-8, pero siempre me devuelve:

Content-Type: text/javascript; charset=ISO-8859-1

A consecuencia de esto ya sea desde una web, cliente java, etc... siempre me devuelve carácteres extraños cuando hay palabras acentuadas, eñes, etc..

He revisado la configuración de TOMCAT:
- server.xml => <Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
- setenv.sh/setenv.bat (máquina virtual) => -Dfile.encoding=UTF8

A que puede ser debido? Que otra configuración debe hacerse para que la respuesta del servicio JSON sea en UTF-8?
Moisés Belda
RE: JSON services response ISO-8859
13 de Fevereiro de 2013 10:18
Resposta

Moisés Belda

Ranking: Junior Member

Mensagens: 61

Data de entrada: 25 de Janeiro de 2011

Mensagens recentes

Moisés Belda:
Hola!

He creado un web service json siguiendo los pasos de la documentación oficial. Lo he hecho con acceso publico sin autentificación para hacer pruebas.
Se accede por get con una url tipo REST.=> Ejemplo: http://localhost:8080/portlet/api/jsonws/obtenerCadena/parametro1/valor1/parametro2/valor2

En su Servicio Remoto asociado (CadenasServiceImpl) he creado la función adecuada que acepta dos valores y monta un objeto JSON de respuesta. En el web.xml del portlet, he hecho las definiciones adecuadas para que acceda a este. El servicio funciona perfectamente, y me devuelve la cadena JSON esperada. El problema es que la respuesta siempre me la devuelve en ISO-8859. La solicitud se envía en UTF-8, e incluso fuerzo la llamada con Content-Type: text/plain; charset=utf-8, pero siempre me devuelve:

Content-Type: text/javascript; charset=ISO-8859-1

A consecuencia de esto ya sea desde una web, cliente java, etc... siempre me devuelve carácteres extraños cuando hay palabras acentuadas, eñes, etc..

He revisado la configuración de TOMCAT:
- server.xml => <Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
- setenv.sh/setenv.bat (máquina virtual) => -Dfile.encoding=UTF8

A que puede ser debido? Que otra configuración debe hacerse para que la respuesta del servicio JSON sea en UTF-8?


Hola

He encontrado el problema... En liferay 6.1 GA1, en la clase com.liferay.portal.struts.JSONAction.java
1
2            response.setContentType(ContentTypes.TEXT_JAVASCRIPT);
3       


Y buscando en el código de la 6.1 GA2....
1
2                        response.setCharacterEncoding(StringPool.UTF8);
3            response.setContentType(ContentTypes.TEXT_JAVASCRIPT);
4       


Es un bug! Arreglado en la GA2... pero desafortunadamente, no puedo hacer upgrade a GA2 en este servidor...

Alguna idea que no sea usar un EXT?