JAX-RS – Modificar el encabezado de la respuesta
febrero 22, 2012
Necesitaba agregar un encabezado a un servicio REST de acuerdo a un parámetro. Para poder hacer esto, necesitas tener acceso a un objeto javax.ws.rs.core.Response de la siguiente manera
@GET
@Path("descarga")
public Response getContenidoDocumento(@QueryParam("documento")String idDocumento,@QueryParam("formato")String formato){
try {
if (formato == null)
formato = "pdf";
Documento documento = Documento.getDocumento(idDocumento);
if (formato.equals("pdf")) {
return Response.ok(documento.getPDF(),"application/pdf").header("Content-Disposition",
"attachment;filename=documento.pdf").build();
} else if (formato.equals("rtf")) {
return Response.ok(documento.getRTF(),"application/rtf").header("Content-Disposition",
"attachment;filename=documentos.rtf").build();
}
return Response.status(Status.BAD_REQUEST).build();
} catch (Exception exc) {
throw new WebApplicationException(exc, Status.INTERNAL_SERVER_ERROR);
}
}
GWT – Comparar valores nulos de JSON
febrero 16, 2012
GWT cuenta con varias clases para el manejo y manipulación de datos en formato json.
Supongamos que obtenemos la siguiente respuesta del servidor
{“id”:”766″,”nombre”:”cirovladimir”}
Para obtener los valores, lo podemos hacer de la siguiente manera
JSONValue value=JSONParser.parseStrict(json);
String id=value.isObject().get(“id”).isString().stringValue();
String nombre=value.isObject().get(“nombre”).isString().stringValue();
Pero, ¿qué pasa si uno de los valores es nulos? ¿cómo podemos hacer una validación? Supongamos ahora que el servidor nos regresa la siguiente cadena
{“id”:”766″,”nombre”:null}
value.isObject().get(“nombre”)==null //debería ser true, sin embargo, regresa false
value.isObject().get(“nombre”).isNull()==JSONNull.getInstance() //regresa true, esta es la forma correcta
Al intentar utilizar la librería JODConverter para convertir algunos documentos del formato RTF a PDF, la aplicación me arrojaba el siguiente error
java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder
Esto se debe a que la librería jodconverter tiene una dependencia hacia slf4j-api, la cuál no contiene ninguna implementación, y por ende, es necesario agregar una implementación de esa API. Para ello, agregué la siguiente dependencia a mi proyecto y quedó resuelto el problema.
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
<version>1.4.3</version>
</dependency>
Asegurate de que las versiones de las librerías coincidan, de lo contrario te arrojará el siguiente error
java.lang.NoClassDefFoundError: Could not initialize class org.slf4j.LoggerFactory
Para ver si estás utilizando versiones diferentes de las librerías, abre el archivo pom.xml y selecciona la pestaña inferior ‘Dependency Hierarchy’, luego busca ‘slf4j’ para ver que versiones fueron resueltas.

Fuentes:
http://stackoverflow.com/questions/3737992/noclassdeffounderror-org-slf4j-impl-staticloggerbinder
Subclipse – Quitar un directorio del control de versiones
febrero 13, 2012
En un proyecto, por error, agregué una carpeta al control de versiones. Para quitarla intenté hacerlo con la opción de “Add to svn:ignore”, sin embargo, ésta estaba desactivada.

Luego intenté eliminarla y hacer un ‘commit’ para que quedará fuera del control de versiones, pero me marcaba el siguiente error
commit -m “Elimine el directorio WAR para quitarlo del control de versiones.” (8 paths specified)
Deleting /home/cirovladimir/Projects/Eclipse/tsj.judicatura.web/war
Transmitting file data …
Transaction is out of date
svn: Commit failed (details follow):
svn: Desactualizado: ‘/Java/Eclipse/tsj.judicatura.web/war’ en transacción ’1219-1′
Asegurate de hacer un respaldo de la carpeta -teniendo cuidado de no copiar las carpetas ‘.svn’-. Abre la ventana ‘SVN Repositories’ (Disponible en la perspectiva Team Synchronization), selecciona la carpeta y da clic en ‘Delete’. Una vez que la elimines, seguirá estando en tu ‘working directory’, así que ve a la ventana Project Explorer o Package Explorer da clic derecho en tu proyecto y luego en ‘Team -> Update to HEAD’, esto eliminará la carpeta y sus contenidos. Copia nuevamente la carpeta de tu respaldo a tu directorio de trabajo y asegurate, esta vez, de excluirla del control de versiones mediante ‘Team->Add to svn:ignore..’
Fuentes:
http://stackoverflow.com/questions/1066809/subclipse-svnignore
Git – Renombrando archivos
febrero 13, 2012
Para renombrar archivos en git lo puedes hacer con el comando
git mv original nuevo
Si ya renombraste un archivo desde el explorador de archivos, no importa, git se dará cuenta del cambio que hiciste cuando hagas un commit. No importa que el comando git status muestre que se eliminó un archivo (original) y que hay otro pendiente de rastrear (nuevo). Para que te muestre correctamente que el archivo ha sido renombrado, intenta el siguiente comando
git commit –dry-run -a
Fuentes:
http://stackoverflow.com/questions/2641146/handling-file-renames-in-git
Qt Creator – Renombrar un proyecto
febrero 10, 2012
Para renombrar, primero cierra el proyecto en Qt Creator. Abre una terminal y ve al directorio donde esta el archivo con extensión ‘.pro’ y renombralo.
mv miproyecto.pro elproyecto.pro
Vuelve a abrirlo en Qt Creator y ya debería aparecerte con el nuevo nombre
Fuentes:
http://www.qtcentre.org/threads/26845-Copy-Rename-project
Qt Creator – Shadow Building
febrero 9, 2012
Al abrir un proyecto en Qt Creator, lo primero que me apareció fue el asistente de configuración.

Este te permite configurar los objetivos -targets- de compilación, es decir, que ejecutables quieres que se generen. Hubo una opción que me llamó la atención, la de “Use Shadow Building”. Nunca había escuchado algo por el estilo, así que investigando un poco encontré la siguiente definición.
Shadow building means building a project in a separate directory, the build directory. The build directory is different from the source directory. One of the benefits of shadow building is that it keeps your source directory clean. Shadow building is the best practice if you need many build configurations for a single set of source.
Lo cuál quiere decir que los ejecutables quedarán (ó deberán estar) en una carpeta fuera de la carpeta de tu proyecto para mantener el código de tu aplicación limpio y en orden.
Java – Declarar e inicializar un HashMap en una sola línea
febrero 7, 2012
La mejor forma para declarar e inicializar un Hashmap la encontre aquí. Simplemente tienes que utilizar una clase anónima de la siguiente manera:
//El siguiente método espera un Hashmap cómo parámetro
json.writeValueAsString(new Hashmap<String, String>(){{put(“key1″,”value1″);put(“key2″,”value2″)}});
Scribefire – Problema para autorizar blog de wordpress en Chrome
febrero 5, 2012
Recientemente he tratado de utilizar Google Chrome como navegador predeterminado (debido a la rápidez que ofrece) a pesar de que no tiene funciones que a mi me son de mucha utilidad -p. ej. CTRL+TAB para intercambiar pestañas de forma MRU, no puedes poner etiquetas a tus favoritos, etc.- Además de estos problemas, al utilizar scribefire y querer agregar mi blog de worpdress jamás logra completar el proceso de autorización (esto puede ser por un error en scribefire pero en firefox no sucede así).
Entonces para agregar un blog de wordpress a scribefire en Google Crhome necesitas hacerlo manualmente, es decir, llenar todos los campos a la hora de agregar el blog de la siguiente manera

Asegurate que el campo API URL quede http://tublog.wordpress.com/xmlrpc.php
Listo! Con eso ya podrías agregar tu blog de wordpress a scribefire

