Foren

Home » Liferay Portal » Español » 3. Desarrollo

Kombinierte Ansicht Flache Ansicht Baumansicht
Threads [ Zurück | Nächste ]
toggle
Moisés Belda
JSON services response ISO-8859
13. Februar 2013 09:03
Antwort

Moisés Belda

Rang: Junior Member

Nachrichten: 61

Eintrittsdatum: 25. Januar 2011

Neue Beiträge

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. Februar 2013 10:18
Antwort

Moisés Belda

Rang: Junior Member

Nachrichten: 61

Eintrittsdatum: 25. Januar 2011

Neue Beiträge

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?