フォーラム

ホーム » Liferay Portal » Español » 3. Desarrollo

構造的に表示 平面上に表示 ツリー上に表示
スレッド [ 前へ | 次へ ]
toggle
Moisés Belda
JSON services response ISO-8859
2013/02/13 9:03
答え

Moisés Belda

ランク: Junior Member

投稿: 61

参加年月日: 2011/01/25

最近の投稿

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
2013/02/13 10:18
答え

Moisés Belda

ランク: Junior Member

投稿: 61

参加年月日: 2011/01/25

最近の投稿

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?