Ejecutar un reporte alojado en JasperServer

Tengo ya bastante de no realizar un post en el blog, pero ahora que dispongo de tiempo quiero compartir la forma en como se ejecuta un reporte alojado en Jasper Server, a través de su webservice.


Para efectos de prueba tengo creada una tabla sobre postgresql con la siguiente estructura:
CREATE TABLE contact
(
id serial NOT NULL,
first_name character varying(50),
last_name character varying(50),
CONSTRAINT pk_contact PRIMARY KEY (id)
);

CREATE TABLE address
(
id serial NOT NULL,
street character varying(50),
fk_contact integer NOT NULL,
CONSTRAINT pk_address PRIMARY KEY (id),
CONSTRAINT address_contact FOREIGN KEY (fk_contact)
REFERENCES contact (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
);
CREATE TABLE phone
(
id serial NOT NULL,
"number" character varying(10),
fk_contact integer NOT NULL,
CONSTRAINT pk_phone PRIMARY KEY (id),
CONSTRAINT phone_contact FOREIGN KEY (fk_contact)
REFERENCES contact (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
);
Y he creado el siguiente reporte a traves de iReport:
















<br> <band height="79" splitType="Stretch"><br> <staticText><br> <reportElement x="181" y="31" width="192" height="20"/><br> <textElement textAlignment="Center"/><br> <text><![CDATA[REPORTE DE PRUEBA]]></text><br> </staticText><br> </band><br>










































Luego de subir y configurar debidamente el reporte en Jasper Server (leer la documentacion de Jasper Server) procedemos a crear el cliente.

Antes que nada debemos de tener claro todas las librerias que se requiren para el cometido, yo las he tomado de mi instalación de iReport 4.1.1, tomaremos como base que es la ruta de instalación de iReport en nuestro equipo que le llamare {ireport-install} , tambien se necesitan dos librerias alojadas de la instalación del Jasper Server en el tomcat o servidor de aplicaciones donde se encuentre a esta ruta le denominare {js-install}


{ireport-install}/ireport/modules/ext/js_activation-1.1.jar
{ireport-install}/ireport/modules/ext/js_axis-1.4patched.jar
{ireport-install}/ireport/modules/ext/js_commons-codec-1.3.jar
{ireport-install}/ireport/modules/ext/js_commons-discovery-0.2.jar
{ireport-install}/ireport/modules/ext/js_commons-httpclient-3.1.jar
{ireport-install}/ireport/modules/ext/js_jasperserver-common-ws-3.5.0.jar
{ireport-install}/ireport/modules/ext/js_jaxrpc.jar
{ireport-install}/ireport/modules/ext/js_mail-1.4.jar
{ireport-install}/ireport/modules/ext/js_saaj-api-1.3.jar
{ireport-install}/ireport/modules/ext/js_wsdl4j-1.5.1.jar
{ireport-install}/ireport/modules/com-jaspersoft-ireport-jasperserver.jar
{ireport-install}/ireport/modules/com-jaspersoft-ireport.jar
{ireport-install}/ireport/modules/ext/jasperreports-4.1.1.jar
{ireport-install}/platform9/lib/org-openide-util.jar
{ireport-install}/ide10/modules/ext/xerces-2.8.0.jar
{js-install}/WEB-INF/lib/jasperserver-api-metadata-4.1.0.jar
{js-install}/WEB-INF/lib/jasperserver-api-metadata-impl-4.1.0.jar


Yo me cree una libreria en netbeans la cual denomine JSClient en el cual inclui todos esos jars. Procedi a crear mi clase JasperServerClient.java:
package org.dani.jasper.server.ws.client;

import com.jaspersoft.ireport.jasperserver.JServer;
import com.jaspersoft.jasperserver.api.metadata.xml.domain.impl.ResourceDescriptor;
import net.sf.jasperreports.engine.JasperPrint;
/**
*
* @author Daniel Alberto
*/
public class JasperServerClient {

private static String WEBSERVICE_URL="http://localhost:8080/jasperserver/services/repository";
private static String USER="jasperadmin";
private static String PASS="jasperadmin";

private JServer server;

public JasperServerClient() {
server=new JServer();
server.setUrl(JasperServerClient.WEBSERVICE_URL);
server.setUsername(JasperServerClient.USER);
server.setPassword(JasperServerClient.PASS);
}

public JasperPrint runReport(String uri,java.util.Map parameters) throws Exception {
ResourceDescriptor rd=new ResourceDescriptor();
rd.setWsType(ResourceDescriptor.TYPE_REPORTUNIT);
rd.setUriString(uri);
return server.getWSClient().runReport(rd, parameters);
}
}


Luego utilizo el cliente:
package org.dani.jasper.server.client;

import org.dani.jasper.server.ws.client.JasperServerClient;
import java.util.*;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;

/**
*
* @author Daniel Alberto
*/
public class Principal {

private JasperServerClient client=new JasperServerClient();

public static void main(String[] args) throws Exception {
Principal p=new Principal();
p.runReportQuery();
}

public void runReportQuery() throws Exception {
String report="/reports/report_query";
Map params=new HashMap();
params.put("id", 1);
JasperPrint print=client.runReport(report, params);
JasperViewer.viewReport(print);
}

}


Si aparece una advertencia en tiempo de ejecucion que dice: ADVERTENCIA: NetBeans implementation of Preferences not found: java.lang.Exception, hacer caso omiso.

Luego se mostrar el reporte de forma satisfactoria. Pueden descargar el ejemplo a traves de este link.

Comentarios (2)

2 Response to "Ejecutar un reporte alojado en JasperServer"

  1. markblog says:
    domingo, septiembre 11, 2011

    Excelente post Daniel, voy a probarlo

  2. Radamanthys17 says:
    miércoles, febrero 08, 2012

    yo tengo un problema no estoy usando el jasper server pero si ireport y es con una aplicacion web jsf , el problema se da cuando necesito imprimir el reporte ya generado en el cliente, y si yo uso las intrucciones que tiene jasper report lo imprime en el servidor.

    y lo que necesito es imprimirlo de un solo sin visualizar el reporte.