cancel
Showing results for 
Search instead for 
Did you mean: 

Acentos y ñ al usar WebScripts

igomez
Champ on-the-rise
Champ on-the-rise
Hola.

Tengo una aplicación en Java que a través de llamadas a los webscripts de Alfresco realiza ciertas acciones en el mismo.

Algunas de ellas son el alta de personas y de comunidades.

El caso es que cuando añado personas o comunidades y estas llevan algún acento o ñ en la plataforma no se añade correctamente.
El código Java que utilizo es este:

      
String alfrescoUser = "usr0000000123";
String alfrescoFirstName = "José Miguel";
String alfrescoLastName = "Español";
String alfrescoEmail = "pruebas@mail_pruebas123.com";
      
JSONObject personaJSON = new JSONObject();
personaJSON.put("userName", alfrescoUser);
personaJSON.put("firstName", alfrescoFirstName);
personaJSON.put("lastName", alfrescoLastName);
personaJSON.put("email", alfrescoEmail);
      
postRequest = new HttpPost("http://'+ host + ":" + port + "/alfresco/service/api/people?alf_ticket=" + alfTicket);

input = new StringEntity(personaJSON.toString());
input.setContentType("application/json; charset=UTF-8");
input.setContentEncoding("UTF-8");
postRequest.setHeader("Content-Type","application/json; charset=UTF-8");
postRequest.setEntity(input);
response = httpClient.execute(postRequest);

He puesto lo del UTF-8 en varios sitios para forzarle pero aún asi nada, me salen cosas de este estilo: Espa�ol, Jos�.

He buscado por foros y demás y he probado lo siguiente, pero en ningún caso funciona:

1- En el setenv.bat en tomcat/bin tengo lo siguiente:

set JAVA_HOME=C:\Alfresco\java               
set JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=UTF-8 -Djava.file.encoding=UTF-8 -Duser.languaje=es -Duser.region=ES -XX:PermSize=256m
set CATALINA_OPTS=%CATALINA_OPTS% -Dfile.encoding="UTF-8"

2- En el fichero tomcat/conf/web.xml, las primeras líneas como:
    <servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>fileEncoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
          <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

3- En el fichero tomcat/conf/server.xml el siguiente código:

    <Connector port="8080" URIEncoding="UTF-8" protocol="HTTP/1.1" 
               connectionTimeout="20000"
               redirectPort="8443" />

He puesto trazas en mi Java y los datos que salen hacia Alfresco salen bien:

Datos de la persona : {"password":"nadadenada","userName":"usuario_pruebas04","email":"pruebas@mail_pruebas123.com","firstName":"Usuario","lastName":"Pruebás"}Codigo: 200

Pero el servidor me responde ya con el encoding mal:
Respuesta del servidor …. 

<< Response: HTTP/1.1 200 OK
{
   "url": "\/alfresco\/service\/api\/person\/usuario_pruebas06",
   "userName": "usuario_pruebas06",
   "enabled": true,
   "firstName": "Usuario",
   "lastName": "Prueb\ufffds",
   "jobtitle": null,
   "organization": null,
   "location": null,
   "telephone": null,
   "mobile": null,
   "email": "pruebas@mail_pruebas123.com",
   "companyaddress1": null,
   "companyaddress2": null,
   "companyaddress3": null,
   "companypostcode": null,
   "companytelephone": null,
   "companyfax": null,
   "companyemail": null,
   "skype": null,
   "instantmsg": null,
   "userStatus": null,
   "userStatusTime": null,
   "googleusername": null,
   "quota": -1,
   "sizeCurrent": 0,
   "emailFeedDisabled": false,
   "persondescription": null
}

Seguiré buscando más información a ver si consigo algo. Mientras tanto, ¿a alguien le ha pasado algo parecido o sabe dónde podría estar el problema?

Muchas gracias!
4 REPLIES 4

aperales
Champ in-the-making
Champ in-the-making
Buenas,

Si de tu cliente java la codificación es correcta, está claro que el problema está en la codificación de la base de datos ¿no?
Podrías probar a definir forzosamente el mapa de caracteres de la base de datos mediante la cadena de conexión que se define en el alfresco-global.properties
db.url=jdbc:mysql://your-host:3306/alfresco?useUnicode=yes&characterEncoding=UTF-8


saludos!

igomez
Champ on-the-rise
Champ on-the-rise
Hola.

La cuestión es que cuando realizo altas desde la propia web si se me guardan bien los acentos, ñ y demás, además la BBDD que uso es Oracle.

Ahora lo volveré a mirar porque aunque la cadena JSON la pinta bien luego parece que el input (cuando hago postRequest.setEntity(input); )destroza este tipo de caracteres por lo que quizá sea tema de mi JVM… Ahora cuando conecte el portátil sigo investigando.

Gracias por contestar  Smiley Happy

igomez
Champ on-the-rise
Champ on-the-rise
Sigo haciendo pruebas y de momento nada funciona.

En el Eclipse he probado a poner todo en UTF-8 y en "Run configurations" igualmente en los parámetros de la JVM tengo un -Dfile.encoding=UTF-8.

Además he forzado el código a que meta en UTF-8 y sigue igual…

postRequest.setHeader("Content-Type","application/json; charset=UTF-8");
postRequest = new HttpPost("http://'+ host + ":" + port + "/alfresco/service/api/people?alf_ticket=" + finder.getValue());
String persona = "{\"password\":\"welcome\",\"userName\":\"usr_0023\",\"email\":\"pruebas@mail_pruebas123.com\",\"firstName\":\"Usuário\",\"lastName\":\"Pruebás\"}";
byte[] utf81 = persona.getBytes("UTF-8");
String personaUTF = new String(utf81, "UTF8");
System.out.print("Persona UTF : " + personaUTF);

input = new StringEntity(personaUTF);     
input.setContentEncoding("UTF-8");
input.setContentType("application/json;charset=UTF-8");
postRequest.setEntity(input);

response = httpClient.execute(postRequest);
response.addHeader("Content-Type","application/json; charset=UTF-8");

Ya no sé ni por donde mirar 😕

LordPalma
Champ in-the-making
Champ in-the-making

prueba encriptando los nombres , busca un forma de encriptar y desencriptar algo asi como base64 y asi te quitas del lio de los caracteres especiales de el español ... luego al recibir vuelves a desencriptar y muestras el dato al cliente.